Python工匠:案例、技巧与工程——学习笔记(1)——变量

1.交换两个变量

>>> author, reader = 'piglei', 'raymond'
>>> author, reader = reader, author ➊
>>> author
'raymond'

2.变量解包

变量解包(unpacking)是Python里的一种特殊赋值操作,允许我们把一个可迭代对象(比如列表)的所有成员,一次性赋值给多个变量:

>>> usernames = ['piglei', 'raymond']
# 注意:左侧变量的个数必须和待展开的列表长度相等,否则会报错
>>> author, reader = usernames
>>> author
'piglei'

假如在赋值语句左侧添加小括号(...),甚至可以一次展开多层嵌套数据:

>>> attrs = [1, ['piglei', 100]]
>>> user_id, (username, score) = attrs
>>> user_id
1
>>> username
'piglei'

除了上面的普通解包外,Python还支持更灵活的动态解包语法。只要用星号表达式(*variables)作为变量名,它便会贪婪[插图]地捕获多个值对象,并将捕获到的内容作为列表赋值给variables。比如,下面data列表里的数据就分为三段:头为用户,尾为分数,中间的都是水果名称。通过把*fruits设置为中间的解包变量,我们就能一次性解包所有变量——fruits会捕获data去头去尾后的所有成员:

>>> data = ['piglei', 'apple', 'orange', 'banana', 100]
>>> username, *fruits, score = data
>>> username
'piglei'
>>> fruits
['apple', 'orange', 'banana']
>>> score
100

和常规的切片赋值语句比起来,动态解包语法要直观许多:

#1. 动态解包
>>> username, *fruits, score = data
# 2. 切片赋值
>>> username, fruits, score = data[0], data[1:-1], data[-1]
# 两种变量赋值方式完全等价

上面的变量解包操作也可以在任何循环语句里使用:

>>> for username, score in [('piglei', 100), ('raymond', 60)]:
...     print(username)
...
piglei
raymond

3.单下划线变量名_

在常用的诸多变量名中,单下划线_是比较特殊的一个。它常作为一个无意义的占位符出现在赋值语句中。_这个名字本身没什么特别之处,这算是大家约定俗成的一种用法。举个例子,假如你想在解包赋值时忽略某些变量,就可以使用_作为变量名

#忽略展开时的第二个变量
>>> author, _ = usernames
# 忽略第一个和最后一个变量之间的所有变量
>>> username, *_, score = data

而在Python交互式命令行(直接执行python命令进入的交互环境)里,_变量还有一层特殊含义——默认保存我们输入的上个表达式的返回值:

>>> 'foo'.upper()
'FOO'
>>> print(_) ➊
FOO

❶此时的_变量保存着上一个.upper()表达式的结果

4.给变量注明类型

4.1 Sphinx格式法:

def remove_invalid(items):
    """剔除 items 里面无效的元素

    :param items: 待剔除对象
    :type items: 包含整数的列表,[int, ...]
    """

4.2 类型注解法(Python 3.5版本以上):

方法:在变量后添加类型,并用冒号隔开即可,比如func(value:str)表示函数的value参数为字符串类型。

下面是给remove_invalid()函数添加类型注解后的样子:

from typing import List

def remove_invalid(items: List[int]): ➊
    """剔除 items 里面无效的元素"""
    ... ...

❶List表示参数为列表类型,[int]表示里面的成员是整型[插图]

注:“类型注解”只是一种有关类型的注释,不提供任何校验功能。要校验类型正确性,需要使用其他静态类型检查工具(如mypy等)。

5.变量命名原则

  • 普通变量,使用蛇形命名法,比如max_value;·
  • 常量,采用全大写字母,使用下划线连接,比如MAX_VALUE;
  • 如果变量标记为“仅内部使用”,为其增加下划线前缀,比如_local_var;·
  • 当名字与Python关键字冲突时,在变量末尾追加下划线,比如class_。
  • 类名应该使用驼峰风格(FooClass)
  • 函数应该使用蛇形风格(bar_function)
  • 布尔值变量名示例
  • 匹配int/float类型的变量名救示例
  • 使用以_id结尾的单词,比如user_id、host_id;
  • 使用以length/count开头或者结尾的单词,比如length_of_username、max_length、users_count。
  • 最好别拿一个名词的复数形式来作为int类型的变量名,比如apples、trips等,因为这类名字容易与那些装着Apple和Trip的普通容器对象(List[Apple]、List[Trip])混淆,建议用number_of_apples或trips_count这类复合词来作为int类型的名字。
  • 数组索引三剑客i、j、k
  • 某个整数n
  • 某个字符串s
  • 某个异常e
  • 文件对象fp
  • 在同一段代码内,不要出现多个相似的变量名,比如同时使用users、users1、users3这种序列;
  • 可以尝试换词来简化复合变量名,比如用is_special来代替is_not_normal;
  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值