Python变量与注释
Bruce小鬼 人气:0Python变量与注释高级用法
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.弄错接口注释的受众
加载全部内容