建站之星做网站,书店网站建设方案,南京制作网站企业,龙湖地产 网站建设谷歌内部的 python 代码规范
熟悉 python 一般都会努力遵循 pep8 规范#xff0c;也会有一些公司制定内部的代码规范。大公司制定规范的目的不是说你一定要怎样去使用编程语言#xff0c;而是让大家遵守同一套规则#xff0c;节省其他人阅读代码的成本#xff0c;方便协作…谷歌内部的 python 代码规范
熟悉 python 一般都会努力遵循 pep8 规范也会有一些公司制定内部的代码规范。大公司制定规范的目的不是说你一定要怎样去使用编程语言而是让大家遵守同一套规则节省其他人阅读代码的成本方便协作和沟通。
对于个人而言日常编写代码只需要保持风格统一前后一致就是一个很大的胜利然后再加入一些实用的规则在写代码的时候有效减少可能引入的 bug。
接下来我截取了一些谷歌的 python 代码规范中一些有意思的要点希望日后能更深刻的感受到它们的用处。
1导入模块和包不导入单独的类、函数或者变量。 这通常能简化导入过程方便命名空间管理。但是缺点也很明显当名称较长时调用函数和类的代码会很长影响可读性。
# yes
from sound.effects import echo
echo.EchoFilter()# no
from sound.effects.echo import EchoFilter
EchoFilter()
如果你想学习自动化测试我这边给你推荐一套视频这个视频可以说是B站播放全网第一的自动化测试教程同时在线人数到达1000人并且还有笔记可以领取及各路大神技术交流798478386
【已更新】B站讲的最详细的Python接口自动化测试实战教程全集实战最新版_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集实战最新版共计200条视频包括1、接口自动化之为什么要做接口自动化、2、接口自动化之request全局观、3、接口自动化之接口实战等UP主更多精彩视频请关注UP账号。https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from333.337.search-card.all.click
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 / 0abc[100]
except ZeroDivisionError:...
except IndexError:...# no
try:1 / 0abc[100]
except:...
4、不要使用可变类型作为函数默认值如果修改了这个变量默认值也会跟着发生变化
# yes
def foo(a, bNone):if b is None:b []
def foo(a, b: Sequence ()):# no
def foo(a, b[]):
def foo(a, btime.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(xNone):if x is None:# no
if len(users) 0:
if number is not None and not number:
if not i % 10:
def f(xNone):x x or []
6谨慎使用装饰器
装饰器可以在函数的参数或返回值上执行任何操作这可能导致让人惊异的隐藏行为。
而且 装饰器在导入时执行从装饰器代码中捕获错误并处理是很困难的。
使用装饰器一定要编写单元测试并且说明它的作用和使用方法。
装饰器本身不要依赖于任何文件 socket, 数据库连接。避免使用 staticmedthod 装饰器多数情况下将方法封装成模块级的函数可以达到同样的效果。
7建议使用类型声明类型声明的好处非常明显
● 使用类型声明可以提高代码的可读性。
● 也可以使用类型检查工具提早发现问题。
● 使用类型声明之后doc string 中就没有必要对参数类型进行说明。
● 在编辑器中会根据类型进行代码提示。
但是在实际操作过程中类型声明往往很难维持。当代码更新完之后一定要记得更新类型声明过时的类型声明会对阅读者造成误导。python 的类型声明成本学习成本较高。
# yes
name: str yuz
def func(a: int) - List[int]: