python 中可以对变量进行解构
pythonusernames = ['silon', 'sibine']
user_a, user_b = usernames
python# 可以对嵌套解构进行解构
attrs = [1, [66, 77]]
num1, (num2, num3) = attrs
同时可以对被解构的内容进行切片
pythondata = [1, 2, 3, 4, 5]
# 动态解构和切片赋值效果相同
a, *b, c = data
# 切片赋值
a, b, c = data[0], data[1:-1], data[-1]
python 在 3.5 版本之后,提供了类型注释
类型注释用于标明变量的类型
需要注意的是:
类型注释只是一种注释,不提供任何校验功能,如果需要校验类型,可以安装其他静态类型检查工具(mypy 等)
使用类型注释,可以配合 ide,得到更好的代码提示效果
pythonfrom typing import List
def remove_invalid(items: List[int]):
"""剔除 items 里面无效的元素"""
另外官方 也推荐使用 sphnix 格式的注释
def remove_invalid(items): """剔除 items 里面无效的元素 :param items: 待剔除对象 :type items: 包含整数的列表,[int, ...] """
Python制定了官方的编码风格指南:PEP 8。这份风格指南里有许多详细的风格建议,比如应该用4个空格缩进,每行不超过79个字符,等等。其中,当然也包含变量的命名规范:
· 对于普通变量,使用蛇形命名法,比如max_value;
· 对于常量,采用全大写字母,使用下划线连接,比如MAX_VALUE;
· 如果变量标记为“仅内部使用”,为其增加下划线前缀,比如_local_var;
· 当名字与Python关键字冲突时,在变量末尾追加下划线,比如class_。
除了必须要遵守 pep8 标准,还需要保证以下要求,达到好的效果
描述性要强
要使用尽量精确的词语进行变量描述,避免使用 data、temp 等非常泛性的名称,容易与其他变量混淆
长度尽量短
可以结合上下文,进行变量名称的精简,例如可以把how_many_points_needed_for_user_level3
直接删减成level3_points
匹配类型 使用固定的命名格式,来表达该变量的类型 常见组合例如:
类型 | 组合 |
---|---|
bool | is_super、 has_permission 、 allow_empty |
int和float | port、 age、 _cnt 、 _length |
list | 复数变量名: apples |
其他 | 建议使用类型注释 |
注意不要使用 复数格式,用于 int 类型变量
仅特定场景使用短命名
场景 | 命名 |
---|---|
数组索引 | i,j,k |
某个整数 | n |
某字符串 | s |
某异常 | e |
文件对象 | fp |
同一段代码,不要出现多个相似变量,例如 name1,name2
编写代码时,使用注释,有几个注意点
python#调用strip()去掉空格
input_string = input_string.strip(
正确示范:
python#如果直接把带空格的输入传递到后端处理,可能会造成后端服务崩溃
# 因此使用strip() 去掉首尾空格
input_string = input_string.strip(
python#初始化访问服务的client对象
token = token_service.get_token()
service_client = ServiceClient(token=token)
service_client.ready()
# 调用服务获取数据,然后进行过滤
data = service_client.fetch_full_data()
for item in data:
if item.value > SOME_VALUE:
...
同时使用指引式注释,也能帮助自己梳理代码
pythonservice_client = make_client() data = fetch_and_filter(service_client)
pythondef foo():
users = {'data': ['piglei', 'raymond']}
...
# 使用一个新名字
user_list = []
...
pythondef generate_trip_png(trip):
"""
根据旅途数据生成 PNG 图片
"""
# 开始初始化 waypoints 数据
waypoints = []
waypoints.append(...)
...
# 开始处理 photo_markers、text_markers
photo_markers, text_markers = [], []
photo_markers.append(...)
...
# 开始计算 marker_count
marker_count = 0
marker_count += ..
python#为所有性别为女或者级别大于3的活跃用户发放10000个金币
user_is_eligible = user.is_active and (user.sex == 'female' or user.level > 3)
if user_is_eligible:
user.add_coins(10000)
pythondef get_best_trip_by_user_id(user_id):
# 心理活动:嗯,这个值未来说不定会修改/二次使用,我们先把它定义成变量吧!
user = get_user(user_id)
trip = get_best_trip(user_id)
result = {
'user': user,
'trip': trip
}
return result
正确示例:
pythondef get_best_trip_by_user_id(user_id):
return {
'user': get_user(user_id),
'trip': get_best_trip(user_id)
}
本文作者:Silon汐冷
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!