一篇文章带你了解谷歌这些大厂是怎么写|一篇文章带你了解谷歌这些大厂是怎么写 python 代码的
目录
- 谷歌内部的 python 代码规范
- 1.导入模块和包,不导入单独的类、函数或者变量。
- 2.从根目录导入,不假定任意的 sys.path,也不使用相对导入。
- 3.谨慎使用异常
- 4.不要使用可变类型作为函数默认值,如果修改了这个变量,默认值也会跟着发生变化。
- 5.注意条件表达式的隐式布尔值
- 6.谨慎使用装饰器
- 7.建议使用类型声明,类型声明的好处非常明显:
- 总结
谷歌内部的 python 代码规范 熟悉 python 一般都会努力遵循 pep8 规范,也会有一些公司制定内部的代码规范。大公司制定规范的目的不是说你一定要怎样去使用编程语言,而是让大家遵守同一套规则,节省其他人阅读代码的成本,方便协作和沟通。对于个人而言,日常编写代码只需要保持风格统一,前后一致,就是一个很大的胜利,然后再加入一些实用的规则,在写代码的时候有效减少可能引入的 bug。
接下来,我截取了一些谷歌的 python 代码规范中一些有意思的要点,希望日后能更深刻的感受到它们的用处。
【一篇文章带你了解谷歌这些大厂是怎么写|一篇文章带你了解谷歌这些大厂是怎么写 python 代码的】
1.导入模块和包,不导入单独的类、函数或者变量。 这通常能简化导入过程,方便命名空间管理。但是缺点也很明显,当名称较长时,调用函数和类的代码会很长,影响可读性。
# yesfrom sound.effects import echoecho.EchoFilter() # nofrom sound.effects.echo import EchoFilterEchoFilter()
2.从根目录导入,不假定任意的 sys.path,也不使用相对导入。 假设 doctor.who 路径已经被某种手段添加到了 sys.path,也应该从开始的地方导入。
# yesfrom doctor.who import jodie # other than doctor.who is already in sys.path# noimport jodie
3.谨慎使用异常 使用异常需要注意的细节有:
- 优先合理的使用内置异常类。比如需要正数的情况下传递了一个负数引发的错误,抛出 ValueError 类型。
- 永远不要使用 except 捕获所有的异常,这可能会造成一些隐藏 bug 难于发现。你应该使用特定异常类型分开捕获。
- 不要使用 assert 指示某些意外情况,应该使用 raise。
- 不要在 try 和 except 子句中加入太多逻辑,try 块的体积越大, 期望之外的异常就越容易被触发。
def division(a, b):if b == 0:raise ValueError('b can not be zero')
避免全局捕获异常,指定异常类型:
# yestry:1 / 0"abc"[100]except ZeroDivisionError:...except IndexError:... # notry:1 / 0"abc"[100]except:...
4.不要使用可变类型作为函数默认值,如果修改了这个变量,默认值也会跟着发生变化。
# yesdef foo(a, b=None):if b is None:b = []def foo(a, b: Sequence = ()): # nodef foo(a, b=[]):def foo(a, b=time.time()):def foo(a, b={}):
5.注意条件表达式的隐式布尔值
- 对于序列(字符串, 列表, 元组), 要注意空序列是 False,在判断是否为空序列时,使用隐性的 if not seq 判断,而不用 if len(seq) == 0;
- 判断数字是否为 0,则使用 number == 0,而不使用用 if not number。因为 number 可能设置的是默认值为 None。
- 判断是否为 None 使用 x is None,而不用 not x。
# yes.if not users: # sequenceif number == 0:if i % 10 == 0:def f(x=None):if x is None: # noif len(users) == 0:if number is not None and not number:if not i % 10:def f(x=None):x = x or []
6.谨慎使用装饰器 装饰器可以在函数的参数或返回值上执行任何操作,这可能导致让人惊异的隐藏行为。而且, 装饰器在导入时执行,从装饰器代码中捕获错误并处理是很困难的。使用装饰器一定要编写单元测试,并且说明它的作用和使用方法。装饰器本身不要依赖于任何文件, socket, 数据库连接。避免使用 @staticmedthod 装饰器,多数情况下,将方法封装成模块级的函数可以达到同样的效果。
7.建议使用类型声明,类型声明的好处非常明显:
- 使用类型声明可以提高代码的可读性。
- 也可以使用类型检查工具提早发现问题。
- 使用类型声明之后,doc string 中就没有必要对参数类型进行说明。
- 在编辑器中会根据类型进行代码提示。
# yesname: str = 'yuz'def func(a: int) -> List[int]:
总结 本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!
推荐阅读
- 宽容谁
- 一个人的旅行,三亚
- 第6.2章(设置属性)
- 布丽吉特,人生绝对的赢家
- 家乡的那条小河
- 讲述,美丽聪明的海欧!
- PMSJ寻平面设计师之现代(Hyundai)
- 夜游宫|夜游宫 心语
- 增长黑客的海盗法则
- 画画吗()