当前位置: 首页 > news >正文

代码规范有用吗?听听100W年薪谷歌大佬怎么说!

谷歌内部的 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账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.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 / 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]:

http://www.lryc.cn/news/241507.html

相关文章:

  • 最详细的软件测试面试题整理与分析
  • 【Vue】浏览器安装vue插件
  • 人人都会Blazor —— 3.3 参数
  • 【数据结构初阶】栈和队列
  • MATLAB - text的两种使用方法
  • ubuntu下配置qtcreator交叉编译环境
  • 金风玉露一相逢|实在智能联手浪潮信息合力致新生成式AI产业生态
  • Design Guidelines for 100 Gbps
  • 苹果企业账号申请思考
  • 【C/C++】素数专题
  • Apple Vision Pro 开发机申请
  • NFS服务器搭建 配置nfs共享目录
  • springboot+bootstrap+java农业电商服务商城系统_30249
  • 【shell】脚本实现将开发机user1账户下的abc文件夹复制到user2~4账户下
  • steamui.dll找不到指定模块,要怎么修复steamui.dll文件
  • 鸿蒙原生应用/元服务开发-AGC分发如何上架HarmonyOS应用
  • 基于单片机仓库温湿度监测报警系统仿真设计
  • 中文rlhf数据集50w条数据解析
  • 解决解析PDF编码报错(以pdfminer为例):UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte xxx
  • chatGPT2:如何构建一个可以回答有关您网站问题的 AI 嵌入(embeddings)
  • Vue3-新特性defineOptions和defineModel
  • 【计算机基础】通过插件plantuml,实现在VScode里面绘制状态机
  • Linux常用基础命令及重要目录,配置文件功能介绍
  • Oracle登录认证方式详解
  • ate测试原理及ate测试系统(软件)知识科普 -纳米软件
  • Linux | 创建 | 删除 | 查看 | 基本命名详解
  • 搭配:基于OpenCV的边缘检测实战
  • AI大发展:人机交互、智能生活全解析
  • Django DRF序列化器serializer
  • 【开源】基于JAVA的衣物搭配系统