设为首页 收藏本站
查看: 501|回复: 0

[经验分享] 几点记录

[复制链接]

尚未签到

发表于 2017-5-3 09:48:45 | 显示全部楼层 |阅读模式
  放假闲暇想写几行代码,心想反正时间充裕不如先看看《google python style guide》挑挑平时写代码时候的错,于是真的发现了数处习惯和知识的漏洞,特此记录。
  1. default argument values
python中定义函数可以个参数赋予默认值,默认值可以是字符串,数字,None,当然也可是list [] 或者 dict {}等。当默认值是上述后两者等可变对象(mutable object)的时候可能产生一些问题,这些潜在的问题是由于函数的加载的时候默认参数值会被初始化,而不是每次函数调用的时候。考虑如下代码:


#default arguments values
def f(a, b=1):
pass
#调用
f(1) # b 缺省,使用默认值 1
f(1, b=2) # b 为 2
  问题所在:

#default arguments values 是 [] 等可变对象时会产生一些潜在的问题
def f(a, l=[]):
l.append(a)
return l
#调用
f(1)
>>> [1]
f(2)
>>> [1, 2]
f(3)
>>> [1, 2, 3]
#改成如下代码解决
def f(a, l=None):
if not l: l = []
# ...
  (此代码参照了 http://blog.csdn.net/delphiwcdj/article/details/5719470 )  
  2. 空格的使用(whitespace)
  代码中适量的空格会是代码格式清晰,更加易读;但过量使用空格也会适得其反,使得阅读、维护成本增高。
  2.1 "()", "{}", "[]" 中不要有空格:

Yes: spam(ham[1], {eggs: 2}, [])
No: spam( ham[ 1 ], { eggs: 2 }, [ ] )
  2.2 逗号(comma),分号(semicolon),冒号(colon)之前不要有空格,在这些符号的(前提是符号不在行末尾)后面可以有一个空格:

Yes:
if a == b:
print x, y
No:
if a == b :
print x , y
  2.3 函数调用、数组选取、dict选取的左括号前不要有空格:

Yes:
spam(1)
list[index] = dict['key']
No:
spam (1)
list [index] = dict ['key']
  2.4 >, =, == 等操作符两侧最好有空格,但函数声明的default arguments value 和函数调用传递参数时 = 两侧不要有空格:

Yes:
def f(a=1, b=2):
pass
f(a=3, b=4)
No:
def f(a = 1, b = 2):
pass
f(a = 3, b = 4)
  2.5 在一行之内不要用空格控制竖直位置,以免增加维护成本:

Yes:
class AaBb(Entity):
a = Field(String(100), default='aa') # name
b = Field(Integer(8)) #number
No:
class AaBb(Entity):
a = Field(String(100), default='aa') # name
b = Field(Integer(8))                       #number

  3 有关字符串的一些连接操作:
  3.1 两个或几个字符串直接拼接的时候可以用 a + b,否则用'%s, %s.'%(a, b) 更妥;
  3.2 循环体内字符串拼接的时候最好先将片段存入数组,再进行 join 拼接。这样可以减少不断的生成临时string 对象从而缩短运行时间。
  4 TODO 注释:
  没有代码可以一次性写到完美,很多实际情况也确实要求我们暂时只把事情做到80%,所以TODO注释是非常重要的。通过TODO注释可以告诉自己也告诉其他人这部分代码可能在未来某时需要怎么样的改进,以及为何采用现在的暂时性方法。
  标准的格式主要为了便于搜索:

# TODO(Zeke): change this to use relations
   最后的结束语看过之后也很有触动,为什么要做一份代码编写规范(协议)呢?我们应该怎样做呢?
  1. 保持代码所在环境的风格。在已有代码中加入新代码的时候应该先去熟悉现有代码的风格,比如缩进、空格的使用,然后再加入自己的代码,以使得新代码的风格不会显得突兀,从而给阅读者造成困扰;
  2. 代码编写规范的意义就在于使别人(或自己)阅读代码的时候专注于代码的内容是什么,而不是这段代码是怎么写的。团队协作尤其需要这些。
  3. 最重要的一点:始终如一的坚持某一风格。
  -eof-

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-372398-1-1.html 上篇帖子: 读《感觉ruby没有python好》有感 下篇帖子: 宽度优先遍历爬虫的python实现
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表