一篇文章带你了解谷歌这些大厂是怎么写 python 代码的
谷歌内部的 python 代码规范
熟悉 python 一般都会努力遵循 pep8 规范,也会有一些公司制定内部的代码规范。大公司制定规范的目的不是说你一定要怎样去使用编程语言,而是让大家遵守同一套规则,节省其他人阅读代码的成本,方便协作和沟通。对于个人而言,日常编写代码只需要保持风格统一,前后一致,就是一个很大的胜利,然后再加入一些实用的规则,在写代码的时候有效减少可能引入的 bug。
接下来,我截取了一些谷歌的 python 代码规范中一些有意思的要点,希望日后能更深刻的感受到它们的用处。
1.导入模块和包,不导入单独的类、函数或者变量。
这通常能简化导入过程,方便命名空间管理。但是缺点也很明显,当名称较长时,调用函数和类的代码会很长,影响可读性。
# yes from sound.effects import echo echo.EchoFilter() # no from sound.effects.echo import EchoFilter EchoFilter()
2.从根目录导入,不假定任意的 sys.path,也不使用相对导入。
假设 doctor.who 路径已经被某种手段添加到了 sys.path,也应该从开始的地方导入。
# yes from doctor.who import jodie # other than doctor.who is already in sys.path # no import jodie
3.谨慎使用异常
使用异常需要注意的细节有:
- 优先合理的使用内置异常类。比如需要正数的情况下传递了一个负数引发的错误,抛出 ValueError 类型。
- 永远不要使用 except 捕获所有的异常,这可能会造成一些隐藏 bug 难于发现。你应该使用特定异常类型分开捕获。
- 不要使用 assert 指示某些意外情况,应该使用 raise。
- 不要在 try 和 except 子句中加入太多逻辑,try 块的体积越大, 期望之外的异常就越容易被触发。
尽量使用正确的内置异常类型:
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: ...
4.不要使用可变类型作为函数默认值,如果修改了这个变量,默认值也会跟着发生变化。
# 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={}):
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: # 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 []
6.谨慎使用装饰器
装饰器可以在函数的参数或返回值上执行任何操作,这可能导致让人惊异的隐藏行为。而且, 装饰器在导入时执行,从装饰器代码中捕获错误并处理是很困难的。使用装饰器一定要编写单元测试,并且说明它的作用和使用方法。装饰器本身不要依赖于任何文件, socket, 数据库连接。避免使用 @staticmedthod 装饰器,多数情况下,将方法封装成模块级的函数可以达到同样的效果。
7.建议使用类型声明,类型声明的好处非常明显:
- 使用类型声明可以提高代码的可读性。
- 也可以使用类型检查工具提早发现问题。
- 使用类型声明之后,doc string 中就没有必要对参数类型进行说明。
- 在编辑器中会根据类型进行代码提示。
但是在实际操作过程中,类型声明往往很难维持。当代码更新完之后,一定要记得更新类型声明,过时的类型声明会对阅读者造成误导。python 的类型声明成本学习成本较高。
# yes name: str = 'yuz' def func(a: int) -> List[int]:
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注猪先飞的更多内容!
相关文章
- 这篇文章主要介绍了python-opencv-画外接矩形框的实例代码,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-04
Python astype(np.float)函数使用方法解析
这篇文章主要介绍了Python astype(np.float)函数使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-06-08- 2022虎年新年即将来临,小编为大家带来了一个利用Python编写的虎年烟花特效,堪称全网最绚烂,文中的示例代码简洁易懂,感兴趣的同学可以动手试一试...2022-02-14
- 在本篇文章里小编给大家分享的是一篇关于python中numpy.empty()函数实例讲解内容,对此有兴趣的朋友们可以学习下。...2021-02-06
python-for x in range的用法(注意要点、细节)
这篇文章主要介绍了python-for x in range的用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-05-10- 这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
- 这篇文章主要介绍了Python中的imread()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-16
- 这篇文章主要介绍了python如何实现b站直播自动发送弹幕,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下...2021-02-20
- 有一种方法,可以不打开网站而直接查看到这个网站的源代码.. 这样可以有效地防止误入恶意网站... 在浏览器地址栏输入: view-source:http://...2016-09-20
- <?php require('path.inc.php'); header('content-Type: text/html; charset=utf-8'); $borough_id = intval($_GET['id']); if(!$borough_id){ echo ' ...2016-11-25
python Matplotlib基础--如何添加文本和标注
这篇文章主要介绍了python Matplotlib基础--如何添加文本和标注,帮助大家更好的利用Matplotlib绘制图表,感兴趣的朋友可以了解下...2021-01-26- 这篇文章主要介绍了解决python 使用openpyxl读写大文件的坑,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-13
- 本文实例讲述了JS基于Mootools实现的个性菜单效果代码。分享给大家供大家参考,具体如下:这里演示基于Mootools做的带动画的垂直型菜单,是一个初学者写的,用来学习Mootools的使用有帮助,下载时请注意要将外部引用的mootools...2015-10-23
- 本文实例讲述了JS+CSS实现分类动态选择及移动功能效果代码。分享给大家供大家参考,具体如下:这是一个类似选项卡功能的选择插件,与普通的TAb区别是加入了动画效果,多用于商品类网站,用作商品分类功能,不过其它网站也可以用,...2015-10-21
- 今天小编就为大家分享一篇python 计算方位角实例(根据两点的坐标计算),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-04-27
- 本文实例讲述了JS实现自定义简单网页软键盘效果。分享给大家供大家参考,具体如下:这是一款自定义的简单点的网页软键盘,没有使用任何控件,仅是为了练习JavaScript编写水平,安全性方面没有过多考虑,有顾虑的可以不用,目的是学...2015-11-08
- php 取除连续空格与换行代码,这些我们都用到str_replace与正则函数 第一种: $content=str_replace("n","",$content); echo $content; 第二种: $content=preg_replac...2016-11-25
- 这篇文章主要为大家详细介绍了python实现双色球随机选号,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-05-02
- 在本篇文章里小编给大家整理的是一篇关于python中使用np.delete()的实例方法,对此有兴趣的朋友们可以学习参考下。...2021-02-01
- php简单用户登陆程序代码 这些教程很对初学者来讲是很有用的哦,这款就下面这一点点代码了哦。 <center> <p> </p> <p> </p> <form name="form1...2016-11-25