不被注意的Python代码规范(2)---语言规范
本篇接上一篇:不被注意的Python代码规范(1)—风格规范,主要介绍Pythn代码的语言规范。
主要的参考是Google Python Style Guide。
Pylint
Pylint是一个代码检查工具,用来发现代码bug和不符合规范的地方,默认代码风格是PEP 8。但是目前流行的IDE,如eclipse,pycharm都包含了代码检查功能。
包
在代码中通过包的全名来import每个模块,比如:
# 用全名引用.
import sound.effects.echo
# 只用模块名引用 (推荐).
from sound.effects import echo
异常处理
异常处理是被允许的,但是使用的时候要注意。
其实之前都没注意过这方面的细节,就会用一个try…except…,上具体代码学习学习:
try:
# 正常操作
pass
except Exception, expression:
# 可以有多种异常,满足一个就执行异常代码,代码:except(Exception1[, Exception2[, ...]])
print expression # 获得expression作为错误的具体表述
else:
# 如果没有异常发生
finally:
# 不管有没有异常发生,都会执行
还有几个点需要注意的:
- 异常的识别比较敏感,会把各种基本异常都识别到,所以尽量指定异常名。
- 尽量减少try后面的代码操作,代码越多,异常可能也越多,而让我们catch不到我们关心的异常。
Lambda函数
Lambda函数定义的是匿名函数,经常和map()、filter()函数连用。主要好处是可以减少定义那些只用到一次的函数。但是不需要用来代替某些内置函数,比如乘法之类的,又来一波实践代码:
>>> l = ['foo', 'bar', 'far']
>>> map(lambda x: x.upper(), l) # 取list中所有词的大写
['FOO', 'BAR', 'FAR']
>>> filter(lambda x: 'f' in x, l) # 筛选list中含有'f'的词
['foo', 'far']
>>> reduce(lambda x, y: x*y, xrange(1,5)) # xrange与range的区别是xrange得到的是一个生成器,reduce函数与map函数差不多,是一个反复调用的功能。
24
装饰器
本来对装饰器一无所知,之前还和同事讨论过装饰器的一些用法之类的,大致了解了。感觉它的主要目的是提取函数中与本身功能无关的一些代码,进而达到代码重用的目的。我主要是参考http://python.jobbole.com/82344/这篇博客,循序渐进地描述了把一个计时功能逐渐转成装饰器的过程,从实现最基本功能,到函数加入参数,再到装饰器加入参数,比较容易理解,很推荐。我把代码重写一遍,加深一下理解。
# coding:utf8
import time
def time_count(func):
s_time = time.time()
func()
e_time = time.time()
time_c = e_time - s_time
print 'elapsed time: {} s.'.format(time_c)
def func():
print 'strat'
time.sleep(0.5)
print 'end'
time_count(func)
# 以上代码是实现func函数的运行时间计算,但是所有的func函数都要以time_count(func)来运行了。
# 以下是用装饰器重写
import time
def time_count(func):
def wrapper():
s_time = time.time()
func()
e_time = time.time()
time_c = e_time - s_time
print 'elapsed time: {} s.'.format(time_c)
return wrapper
@time_count
def func():
print 'strat'
time.sleep(0.5)
print 'end'
func()
至此,对于Python的代码规范大致总结了一些我个人之前忽略了的方面,也希望之后在coding的过程中进一步应用,写出漂亮的代码。
本文标题: 不被注意的Python代码规范(2)---语言规范
原始链接: https://oyeblog.com/2017/python_code_rules_2/
发布时间: 2017年11月16日 - 19时30分
最后更新: 2023年10月22日 - 15时06分
版权声明: 本站文章均采用CC BY-NC-SA 4.0协议进行许可。转载请注明出处!