详解Python变量与注释高级用法
作者:Bruce小鬼
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.弄错接口注释的受众
到此这篇关于Python变量与注释高级用法的文章就介绍到这了,更多相关Python变量与注释内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!