熟悉 python 一般都会努力遵循 pep8 规范,也会有一些公司制定内部的代码规范。大公司制定规范的目的不是说你一定要怎样去使用编程语言,而是让大家遵守同一套规则,节省其他人阅读代码的成本,方便协作和沟通。对于个人而言,日常编写代码只需要保持风格统一,前后一致,就是一个很大的胜利,然后再加入一些实用的规则,在写代码的时候有效减少可能引入的 bug。

接下来,我截取了一些谷歌的 python 代码规范中一些有意思的要点,希望日后能更深刻的感受到它们的用处。
这通常能简化导入过程,方便命名空间管理。但是缺点也很明显,当名称较长时,调用函数和类的代码会很长,影响可读性。
# yes from sound.effects import echo echo.EchoFilter() # no from sound.effects.echo import EchoFilter EchoFilter()
假设 doctor.who 路径已经被某种手段添加到了 sys.path,也应该从开始的地方导入。
# yes from doctor.who import jodie # other than doctor.who is already in sys.path # no import jodie
使用异常需要注意的细节有:
尽量使用正确的内置异常类型:
def division(a, b):
if b == 0:
raise ValueError('b can not be zero')
避免全局捕获异常,指定异常类型:
# yes
try:
1 / 0
"abc"[100]
except ZeroDivisionError:
...
except IndexError:
...
# no
try:
1 / 0
"abc"[100]
except:
...
# yes
def foo(a, b=None):
if b is None:
b = []
def foo(a, b: Sequence = ()):
# no
def foo(a, b=[]):
def foo(a, b=time.time()):
def foo(a, b={}):
# yes
.if not users: # sequence
if number == 0:
if i % 10 == 0:
def f(x=None):
if x is None:
# no
if len(users) == 0:
if number is not None and not number:
if not i % 10:
def f(x=None):
x = x or []
装饰器可以在函数的参数或返回值上执行任何操作,这可能导致让人惊异的隐藏行为。而且, 装饰器在导入时执行,从装饰器代码中捕获错误并处理是很困难的。使用装饰器一定要编写单元测试,并且说明它的作用和使用方法。装饰器本身不要依赖于任何文件, socket, 数据库连接。避免使用 @staticmedthod 装饰器,多数情况下,将方法封装成模块级的函数可以达到同样的效果。
但是在实际操作过程中,类型声明往往很难维持。当代码更新完之后,一定要记得更新类型声明,过时的类型声明会对阅读者造成误导。python 的类型声明成本学习成本较高。
# yes name: str = 'yuz' def func(a: int) -> List[int]:
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注的更多内容!