一篇文章带你了解谷歌这些大厂是怎么写 python 代码的

 更新时间:2021年09月17日 17:18:30   作者:柠檬软件测试  
这篇文章主要介绍了谷歌这些大厂怎么写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 sqrt()函数用法说明

    Python sqrt()函数用法说明

    这篇文章主要介绍了Python sqrt()函数用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • 使用Python创建websocket服务端并给出不同客户端的请求

    使用Python创建websocket服务端并给出不同客户端的请求

    本文主要介绍了使用Python创建websocket服务端并给出不同客户端的请求,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • Python列表list内建函数用法实例分析【insert、remove、index、pop等】

    Python列表list内建函数用法实例分析【insert、remove、index、pop等】

    这篇文章主要介绍了Python列表list内建函数用法,结合具体实例形式分析了list中insert、remove、index、pop等函数的功能、使用方法与相关注意事项,需要的朋友可以参考下
    2017-07-07
  • 基于Python编写一个ISBN查询工具

    基于Python编写一个ISBN查询工具

    这篇文章主要为大家详细介绍了如何利用Python编写一个简单的ISBN查询工具,可以用于图书管理、图书销售、图书收集和阅读等场景,需要的可以参考一下
    2023-05-05
  • Python中的引用知识点总结

    Python中的引用知识点总结

    在本文里我们给大家整理了关于Python中的引用知识点以及相关代码总结,需要的朋友们跟着学习下。
    2019-05-05
  • Python学习开发之图形用户界面详解

    Python学习开发之图形用户界面详解

    当前流行的计算机桌面应用程序大多数为图形化用户界面(Graphic User Interface,GUI),python也提供了多个图形开发界面的库,这篇文章主要给大家介绍了关于Python学习开发之图形用户界面的相关资料,需要的朋友可以参考下
    2021-08-08
  • Python使用Matplotlib绘制散点趋势线的代码详解

    Python使用Matplotlib绘制散点趋势线的代码详解

    Matplotlib是一个用于数据可视化的强大Python库,其基本功能之一是创建带有趋势线的散点图,散点图对于可视化变量之间的关系非常有用,本文将指导您使用Matplotlib绘制散点趋势线的过程,涵盖线性和多项式趋势线,需要的朋友可以参考下
    2025-01-01
  • python语言实现贪吃蛇游戏

    python语言实现贪吃蛇游戏

    这篇文章主要为大家详细介绍了python语言实现贪吃蛇游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11
  • 使用70行Python代码实现一个递归下降解析器的教程

    使用70行Python代码实现一个递归下降解析器的教程

    这篇文章主要介绍了使用70行Python代码实现一个递归下降解析器的教程,文章分步讲解最后整合出代码,需要的朋友可以参考下
    2015-04-04
  • python可视化分析绘制散点图和边界气泡图

    python可视化分析绘制散点图和边界气泡图

    这篇文章主要介绍了python可视化分析绘制散点图和边界气泡图,python绘制散点图,展现两个变量间的关系,当数据包含多组时,使用不同颜色和形状区分
    2022-06-06

最新评论