Python 小招数: 常用特性
人要有毅力,否则一事无成 – 居里夫人
连续赋值
- 连续赋值的时候是从右边向左边依次赋值
a=b=c=1
# 结果
# c=1 b=c a=b
拆包
- 多个变量多个值可以用一个赋值符号(=)做到同时赋值.赋值时,将依据位置关系,将=右侧的值分别赋值给左侧的变量
a,b = 1,2
# 等价于 a=1 b=2
上面也等效于
a,b=(1,2)
# 结果 a = 1 b=2
也等价于
a,b = [1,2]
# 结果 a=1 b=2
像这种操作我们管这种叫做拆包
- 同理下面也一样
a,*b=[1,2,3,4]
# 结果 a=1 b = [2,3,4]
a,b = '12'
# 结果a =1 b=2
a,b = {1:'a',2:'b'} # 特别注意的就是字典拆包拆出来的是每个键
# 结果 a =1 b =2
拆包时 = 右侧的序列的长度需要与左侧的变量个数相同,如果不同,可以使用 *变量的形式一次性接受多个参数
a,*b,c=(1,2,3,4)
# 结果 a=1 c =4 b = [2,3]
for else 语句(用的太少了)
- 例如
for i in range(5):
print(i)
else:
print('所有项目被迭代使用')
# 结果
# 0
# 1
# 2
# 3
# 4
# 所有项被迭代
可以看到当 for 循环中所有的项被循环完了之后才继续执行 else 语句
- 但是这里并不是每次都执行,只有当 for 循环没有被 break 的时候才继续执行后续的 else 代码
for i in range(5):
if i == 3:
break
print(i)
else:
print('所有项被迭代使用')
# 结果
# 0
# 1
# 2
类相关
类属性/对象属性动态绑定
- @property
装饰器@property 可以将类中的方法转换为属性
class A:
@property
def apple(self):
return 'apple'
被@property 装饰的方法可以像属性一样使用,但是只能是只读的,不能被修改,否则爆错误
class A:
@property
def apple(self):
return 'apple'
a =A()
a.apple = 'black'
# 结果 直接报错
如果必须要求属性更改的话,必须在添加一个 setter 方法
class A:
@property
def apple(self):
return self._apple
@apple.setter
def apple(self, value):
self._apple = value
a = A()
a.apple = 'black'
print(a.apple)
# 结果black
这里的关键是必须要用@property 装饰一个方法,会自动生成名为@方法名.setter 的装饰器
函数相关
函数参数类型写法
def say_hello(name:str):
print(name,'hello')
Python 并不会对参数类型校验,这里是为了方便阅读
函数返回值类型标注
def say_hello(name)->str:
print(name,'hello')