当前位置: 首页 > 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]:

相关文章:

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

谷歌内部的 python 代码规范 熟悉 python 一般都会努力遵循 pep8 规范,也会有一些公司制定内部的代码规范。大公司制定规范的目的不是说你一定要怎样去使用编程语言,而是让大家遵守同一套规则,节省其他人阅读代码的成本,方便协作…...

最详细的软件测试面试题整理与分析

前言 时光荏苒,一转眼到了2023年末尾,2024年也快要来了,人员就业市场以往的寒冬也貌似有了转暖的迹象,身边大批的就业人员也开始了紧张的备战之中。 近几周也和多家合作公司的HR进行了沟通,发现虽然岗位就业情况较去年…...

【Vue】浏览器安装vue插件

首先看一下安装之后的效果&#xff0c;再考虑一下要不要安装 安装完之后&#xff0c;打开浏览器控制台&#xff08;ctrl shift j) <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</t…...

人人都会Blazor —— 3.3 参数

参数最常见的使用,目的是使组件可以接收动态数据。 声明参数 参数使用 [Parameter] 特性的公共 C# 属性进行定义。 在下面的示例中,内置引用类型 (System.String) 和用户定义的引用类型 (PanelBody) 作为组件参数进行传递。 PanelBody.cs: public class PanelBody {publ…...

【数据结构初阶】栈和队列

栈和队列 1.栈1.1栈的概念和结构1.2栈的实现 2.队列2.1队列的概念和结构2.2队列的实现 1.栈 1.1栈的概念和结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。…...

MATLAB - text的两种使用方法

text小技巧 1. 常规使用&#xff08;Method 1&#xff09;2. 在显示画面的相对位置&#xff08;Method 2&#xff09;3. 举个例子 1. 常规使用&#xff08;Method 1&#xff09; text(x,y,txt)2. 在显示画面的相对位置&#xff08;Method 2&#xff09; text(string,‘ABC’,…...

ubuntu下配置qtcreator交叉编译环境

文章目录 安装交叉编译工具安装qt creator开发环境配置交叉编译示例demo参考 安装交叉编译工具 安装qt creator开发环境 1 官网 2 填写信息 3 下载 默认没有出现Qt5.15版本 WISONIC\80081001ub16-1001:~$ /opt/Qt/Tools/QtCreator/bin/qtcreator /opt/Qt/Tools/QtCreat…...

金风玉露一相逢|实在智能联手浪潮信息合力致新生成式AI产业生态

近日&#xff0c;实在智能正式加入浪潮信息元脑生态AIStore。 实在智能是一家基于AGI大模型超自动化技术&#xff0c;领跑人机协同时代的人工智能科技公司&#xff0c;以其自研垂直的“TARS&#xff08;塔斯&#xff09;大语言模型”技术、实在RPA Agent智能体数字员工产品和超…...

Design Guidelines for 100 Gbps

文章目录 Stratix V GT Transceiver ChannelsCFP2 Host Connector Assembly and PinoutStratix V GT to CFP2 Interface Layout DesignBoard Stack Up DimensionsExample Design Channel PerformanceSimulation Results for Stratix V GT to CFP2 Connector Layout Design Desi…...

苹果企业账号申请思考

苹果企业账号 好多年的企业账号想启用&#xff0c;但是没有找到入口&#xff0c;直接联系了一下苹果的技术支持。通过邮件联系&#xff0c;之后他们回电&#xff0c;吧啦吧啦问了一大堆关于企业账号的事情&#xff0c;他们对这个还挺关注的&#xff0c;主要是集中在是否是有必…...

【C/C++】素数专题

素数专题 1.判断素数模板2.求范围内的素数&#xff08;101-200&#xff09;3.判断素数与分解 1.判断素数模板 #include<stdio.h> #include<math.h>int prism(int n){if(n1) return 0;for(int i2;i<sqrt(n);i){if(n%i0) return 0;}return 1; }int main() {int n…...

Apple Vision Pro 开发机申请

申请地址: &#xff08;免费租用形式&#xff09; Developer Kit - visionOS - Apple Developer 上海Apple Lab 互动申请&#xff1a; View - Meet with Apple Experts - Apple Developer (需要完善的产品才能去测试哦) 它是如何工作的 我们将借给你一个Apple Vision Pro开发…...

NFS服务器搭建 配置nfs共享目录

一定要用二级目录&#xff0c;否则NFS坏了主机都启动不起来 一级目录是强制挂载&#xff0c;二级目录是动态挂载 nfs共享远程目录具体步骤&#xff1a; 服务器端配置&#xff1a; 1.安装NFS服务器软件 sudo apt-get install nfs-kernel-server # 安装 NFS服务器端 2.添加…...

springboot+bootstrap+java农业电商服务商城系统_30249

本农业电商服务系统是为了提高用户查阅信息的效率和管理人员管理信息的工作效率&#xff0c;可以快速存储大量数据&#xff0c;还有信息检索功能&#xff0c;这大大的满足了管理员、会员和商家这三者的需求。操作简单易懂&#xff0c;合理分析各个模块的功能&#xff0c;尽可能…...

【shell】脚本实现将开发机user1账户下的abc文件夹复制到user2~4账户下

1 主要内容 可以使用Shell脚本来实现将开发机&#xff08;Linux&#xff09;上user1账户下的abc文件夹复制到user2、user3和user4账户下。 #!/bin/bash# 数组赋值&#xff0c;目标用户列表 # target_users(user2 user3 user4) # 定义数组 target_users()# 生成user数字的数组…...

steamui.dll找不到指定模块,要怎么修复steamui.dll文件

当我们使用Steam进行游戏时&#xff0c;有时可能会面对一些令人无奈的技术问题。一种常见的问题是“找不到指定模块steamui.dll”&#xff0c;这可能是由于缺少文件、文件损坏或软件冲突等原因导致。但别担心&#xff0c;这篇文章将提供几种解决此问题的方法&#xff0c;并针对…...

鸿蒙原生应用/元服务开发-AGC分发如何上架HarmonyOS应用

一、上架整体流程 二、上架HarmonyOS应用 获取到HarmonyOS应用软件包后&#xff0c;开发者可将应用提交至AGC申请上架。上架成功后&#xff0c;用户即可在华为应用市场搜索获取开发者的HarmonyOS应用。 配置应用信息 1.登录AppGallery Connect&#xff0c;选择“我的应用”。…...

基于单片机仓库温湿度监测报警系统仿真设计

**单片机设计介绍&#xff0c;基于单片机仓库温湿度监测报警系统仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的仓库温湿度监测报警系统可以被设计成能够实时监测仓库内的温度和湿度&#xff0c;并根据预设…...

中文rlhf数据集50w条数据解析

中文rlhf数据集50w条数据解析 解析代码数据名代码解析 解析代码 import jieba from tqdm import tqdm import re import pandas as pd import numpy as npdef find_non_english_text(text):pattern re.compile(r[^a-zA-Z])return pattern.sub(, text)def find_chinese_text(t…...

解决解析PDF编码报错(以pdfminer为例):UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte xxx

解决方法 博主使用的是pdfminer解析PDF文档&#xff0c;这个解决方法是通用的&#xff0c;只需要使PDFParser传入的文件为二进制文件即可&#xff0c;示例程序&#xff1a; from pdfminer.pdfparser import PDFParserpdf_parser PDFParser(open("pdf文件.pdf", &q…...

源代码论文分享|这份欢迪迈手机商城设计与开发系统资料,真的挺适合拿来学习和参考!

做课程设计或者毕业设计的时候&#xff0c;很多人真正缺的不是“资料”&#xff0c;而是一份能看、能学、能改、还能帮自己理清思路的完整项目。尤其是做商城系统这种题目&#xff0c;网上看起来资源很多&#xff0c;但真正靠谱的&#xff0c;往往不是只有页面截图&#xff0c;…...

NVIDIA Profile Inspector:解锁显卡隐藏性能的3个实用场景指南

NVIDIA Profile Inspector&#xff1a;解锁显卡隐藏性能的3个实用场景指南 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 你是否曾经觉得NVIDIA控制面板提供的选项太少&#xff0c;无法充分发挥显卡潜…...

Java ThreadLocal 内存泄漏案例分析

Java ThreadLocal 内存泄漏案例分析 在多线程编程中&#xff0c;ThreadLocal是一种常用的线程隔离机制&#xff0c;它能够为每个线程提供独立的变量副本&#xff0c;避免线程安全问题。如果使用不当&#xff0c;ThreadLocal也可能导致内存泄漏问题&#xff0c;影响系统稳定性。…...

Windows VEH异常处理实战:用C++写一个无痕Hook框架(附完整源码)

Windows VEH异常处理框架深度解析&#xff1a;从原理到工程实践 在Windows系统开发领域&#xff0c;异常处理机制一直是构建健壮软件系统的核心技术之一。VEH&#xff08;Vectored Exception Handling&#xff09;作为Windows异常处理体系中的重要组成部分&#xff0c;不仅为开…...

【FAQ】HP Anyware文章汇总列表

方案原理 【方案原理】什么是PCoIP技术 【方案原理】什么是PCoIP Ultra协议增强 Anyware Agent Win10 22H2物理机安装总结 物理机消费级NVIDIA GPU的说明 PCoIP 会话后物理工作站本地显示器黑屏 【组件安装】Ubuntu 22.04.5 desktop 安装 Anyware Agent 【FAQ】安装Agent的…...

marketingskills ASO优化指南:提升应用商店排名的实战技巧

marketingskills ASO优化指南&#xff1a;提升应用商店排名的实战技巧 【免费下载链接】marketingskills Marketing skills for Claude Code and AI agents. CRO, copywriting, SEO, analytics, and growth engineering. 项目地址: https://gitcode.com/GitHub_Trending/mar/…...

混元Hy3 preview实测:不追榜单的腾讯,开始“出卷子“了

这周国产大模型扎堆发布&#xff1a;阿里Qwen 3.6 Max、月之暗面Kimi 2.6、DeepSeek V4箭在弦上…… 混元Hy3 preview也在昨天亮相。作为腾讯首席AI科学家姚顺雨主导的第一代模型&#xff0c;它的定位很明确&#xff1a;不到榜单打分&#xff0c;到真实世界解决问题。 先看数…...

ARM SME架构MOVA指令详解与优化实践

1. ARM SME架构中的MOVA指令概述在ARMv9架构引入的SME&#xff08;Scalable Matrix Extension&#xff09;扩展中&#xff0c;MOVA指令扮演着矩阵加速器(ZA)与向量寄存器之间数据搬运的关键角色。作为SIMD编程的核心指令之一&#xff0c;MOVA实现了ZA tile切片与SVE向量寄存器之…...

猫抓cat-catch深度解析:构建专业级浏览器资源捕获工作流的终极指南

猫抓cat-catch深度解析&#xff1a;构建专业级浏览器资源捕获工作流的终极指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 猫抓cat-catch作为一…...

3步构建你的专属音频空间:从基础调校到专业级系统音频优化

3步构建你的专属音频空间&#xff1a;从基础调校到专业级系统音频优化 【免费下载链接】equalizerapo Equalizer APO mirror 项目地址: https://gitcode.com/gh_mirrors/eq/equalizerapo 想象一下&#xff0c;你正在享受最爱的音乐&#xff0c;但总觉得低音不够浑厚&…...