详解Python变量与注释高级用法
作者:Bruce小鬼 发布时间:2022-08-06 08:17:08
Python变量与注释高级用法
1.概述
好的变量和注释并非为计算机而写,而是为每个阅读代码的人而写。变量与注释是表达作者思想的基础,他们对代码质量的贡献母庸质疑。
2.变量
2.1.变量解包
1.什么是变量解包
把一个可迭代对象的所有成员,一次性的赋值给多个变量的过程就是变量解包。
2.变量解包语法
# 变量解包
username = ['zhangsan', '18']
name, age = username
print('name:{}, age:{} '.format(name, age))
# 嵌套类型变量解包
username = [1, ['zhangsan', 18]]
number, (name, age) = username
print('number:{}, name:{}, age:{}'.format(number, name, age))
# 匹配模式解包
data = ['zhangsan', 'banana', 'apple', 'orange', 18]
name, *fruits, score = data
print('name:{}, fruits:{}, score:{}'.format(name, fruits, score))
# 切片解包
data = ['zhangsan', 'banana', 'apple', 'orange', 18]
name, fruits, score = data[0], data[1:-1], data[-1]
print('name:{}, fruits:{}, score:{}'.format(name, fruits, score))
# 变量解包用到for循环
for name, age in [('zhangsan', 15), ('lisi', 18)]:
print('name:{}, age:{}'.format(name, age))
# 单下划线变量名
username = ['zhangsan', 19]
name, _ = username
print(name, _)
2.2.给变量注明类型
1.变量注明类型介绍
python给变量注明类型,与java变量类型不同,python的变量类型只是一种提示功能,不提供任何校验功能。
因此传入的变量类型与校验类型不一致也不会报错。
变量注明类型语法非常简单,在变量名称后面用冒号分隔表名类型即可。
2.变量注明类型示例
# list表示参数为列表类型,int表示里面的成员是整形
def remove_invalid(item: list[int]):
print(item)
# 传入符合变量类型参数
remove_invalid([1, 2, 3])
# 传入不符合变量类型参数,不影响函数执行结果。
remove_invalid(1)
# 类型注解使用demo
class Duck:
def __init__(self, color:str):
self.color = color
# 为quack方法注明返回值类型为None
def quack(self) -> None:
print(f"Hi, I'm a {self.color} duck")
# -> List[Duck]:用typing模块的List对象为函数返回值标注具体类型
def create_random_ducks(number:int) -> List[Duck]:
# 为变量加上类型声明
ducks: List[Duck] = []
for _ in number:
color = random.choice(['yellow', 'white', 'gray'])
ducks.append(Duck(color=color))
return ducks
ducks = create_random_ducks((1,2,3))
for duck in ducks:
duck.quack()
2.3.变量命名原则
给变量起名主要有两种流派:一是通过大小写界定单词的驼峰命名,例如Java语言。二是通过下划线连接的蛇形命名,例如python语言。
遵循PEP8原则
描述性要强
长度尽量短
变量注明类型
超短命名
1.遵循PEP8原则
PEP8原名《Python Enhacement Proposal #8》译为《8 号 Python 增强规范》为代码编写风格提供了指南,变量命名部分规范如下。
普通变量,使用蛇形命名法,比如max_value
常量,采用全部大写字母,使用下划线连接,比如 MAX_VALUE
仅内部使用变量,在变量前增加下划线前缀,比如 _local_var
变量名称与python关键字冲突时,在变量末尾追加下划线,比如 class_
2.描述性要强
写作过程中一项重要的工作就是为句子斟酌恰当的词语,不同的词语描述性的强弱是不同的。比如”冬天傲骨的梅花“ 就比 ”花“ 描述性要强。为变量命名和词语一样,同样有描述性强弱之分。
下面是描述性强弱不同的变量,对比可以感受到描述性强的变量名称使代码更易读。
# 描述性弱的变量名称:看不出它在描述什么
vlaue = process(s.strip())
# 描述性强的变量名称:从用户输入参数中解析出用户名称,并剔除参数中的空格。
username = extract_username(input_string.strip())
3.长度尽量短
假如一个特别长的重复出现,读者不会觉得它精确,反而是啰嗦难读。在保证描述性清晰前提下,尽量让名字简短易读,通常控制在4个单词内。
4.变量注明类型
虽然python的变量不需要声明类型,但是为了提升可读性,我们可以为变量注明类型。
除了为变量注明类型外,还有约定俗称的变量名称与类型建立匹配关系,下面是一些变量名称和类型匹配的例子。
变量名 | 含义 | 说明 |
---|---|---|
is_superuser | 是否是超级用户 | is 表示是或不是 |
has_errors | 有没有错 | hans 表示有或没有 |
allow_empty | 是否允许空值 | allow表示是否允许 |
5.超短命令
在变量命名中有一类名称比较特别,只有一两个字母,通常他们分为两类,一类是大家约定俗称的短名字,另一类是起别名。
约定俗称常用名称
数组索引三剑客 i、j、k
某个整数 n
某个字符串 s
某个异常 e
文件对象 fp
长名称起别名
is_not_normal as l
3.注释
注释不会影响代码的行为,它会影响代码的可读性。
3.1.注释类型
python的注释分为两种,一种是代码内注释,一种是函数、类的注释也称为接口注释。
行内注释
# 使用strip()去掉空格的好处:
# 1.数据库保存数据时占用空间更小
# 2.不必因为用户多打了空格而要求用户重新输入。
username = extract_username(input_string.strip())
接口注释
class Person:
# 使用三个单引号或三个双引号就是接口注释。
'''人
:param name: 姓名
: param age: 年龄
: param favrite_color: 最喜欢的颜色
'''
def __init__(self, name, age, favrite_color):
self.name = name
self.age = age
self.favrite_color = color
3.2.错误使用注释案例
1.用注释屏蔽代码
在编程中会用注释屏蔽代码,如果这些代码不需要了可以直接删掉,如果需要用到这些代码可以从Git仓库中找到。临时注释掉的大段代码,对于阅读代码的人来说是一种干扰,没有任何意义。
2.用注释复述代码
# 调用strip()去掉空格
input_string = input_string.strip()
上面这样的注释完全是冗余的,因为读者从代码本身就能读到注释里的信息。好的注释应该是这样
# 如果将带有空格的参数传递到后端处理,可能会造成服务奔溃
# 因此使用strip()去掉收尾空格
input_string = input_string.strip()
注释作为代码之外的说明性文字,应该尽量提供那些读者无法从代码里读出的信息,描述代码为什么要这么做,而不是简单复述代码本身。
除了为什么的解释性注释外,还有一种注释也很常见:指引性注释
这种注释不复述代码,而是简明扼要概括代码功能,起到”代码导读“作用。
指引性注释并不提供代码里读不到东西——假如没有注释,耐心读完所有代码也能知道代码做了什么。指引性注释就是降低代码认知的成本,让我们更容易理解代码的意图。
指引性注释示例
# 初始化访问服务的client对象
token = token_service.get_token()
service_client = ServiceClient(token = token)
service_client.ready()
3.弄错接口注释的受众
来源:https://blog.csdn.net/m0_38039437/article/details/126182699


猜你喜欢
- 具体用法如下: -- ============================================= -- Author: cy
- MongoDB 是高性能数据,但是在使用的过程中,大家偶尔还会碰到一些性能问题。MongoDB和其它关系型数据库相比,例如 SQL Serv
- 行向量方式1import numpy as npb=np.array([1,2,3]).reshape((1,-1))print(b,b.s
- 必要准备你得有一个sqlserver数据库,并且要和vs项目连接。关于VS连接sqlserver数据库的教程前几天发过了,链接如下VS202
- Psyco 是严格地在 Python 运行时进行操作的。也就是说,Python 源代码是通过 python 命令编译成字节码的,所用的方式和
- 本例中以CentOS6.6下修改MySQL5.1.73举例说明。1.首先输入“service mysqld status”查看当前mysql
- 1、csv文件的导入和导出 通过一个矩阵导出为csv文件,将csv文件导入为矩阵将csv文件导入到一个矩阵中import numpy my_
- mysql创建用户并授权:格式:grant 权限 on 数据库名.表名 to 用户@登录主机 identified by "用户密
- 大家好,我是东哥。本篇和大家介绍一个经典的异常检测算法:局部离群因子(Local Outlier Factor),简称LOF算法。背景Loc
- 一、前言设计应用程序时,有时不希望将一个不太相关的功能集成到程序中,或者是因为该功能与当前设计的应用程序联系不大,或者是因为该功能已经可以使
- 目录前言场景分析总结前言前几天,有位朋友微信联系我,告知一个生产数据库,在机器宕机恢复后,实例启动失败,而且该实例没有做任何的高可用、容灾、
- VUE-ElementUI 时间区间选择器官方文档中使用picker-options属性来限制可选择的日期一、单个输入框<el-dat
- 微信小程序 ES6Promise.all批量上传文件实现代码客户端Page({ onLoad: function() { &nb
- 在《多进程并发与同步》中介绍了进程创建与信息共享,除此之外python还提供了更方便的进程间通讯方式。进程间通讯multiprocessin
- “表情包”是现在非常流行的交流方式,通过一张图片就能把文字不能表达或不便于表达的情感给表示出来,表情包一经诞生,就统治了中国人的社交圈,尤其
- mysql 索引详解:在mysql 中,索引可以分为两种类型 hash索引和 btree索引。 什么情况下可以用到B树索引?&nb
- 前言JS 中 GBK 编码转字符串是非常简单的,直接调用 TextDecoder 即可:const gbkBuf = n
- 一、tooltip(提示框) 源码文件: Tooltip.jsTooltip.scss实现原理: 1、获取当前
- Facebook的网站速度做为最关键的公司任务之一。在2009年,我们成功地实现了Facebook网站速度提升两倍 。而正是我们的工程师团队
- range(x)range(9) 代表着0、1、2、3、4、5、6、7、8 这九个顺序数字的集合。也就是 range(9) => ra