条件、循环和其他语句

cooolr 于 2023-01-30 发布

赋值魔法

序列解包/递归解包/并行赋值

>>>x,y,z=1,2,3
>>>print x,y,z
1 2 3
>>>x,y=y,x
>>>print x,y,z
2 1 3

链式赋值

>>>x=y=somedunction()
和下面语句效果是一样的
>>>y=somefunction()
>>>x=y

增量赋值

>>>x=2
>>>x +=1
>>>x *=2
等同于x=x+1,x=x*2
将表达式运算符放在=的左边
适用于其他运算符号
适用于其他数据类型

条件和条件语句

布尔变量

下面的值作为布尔表达式时会被解释器看作假
False None 0 "" () [] {}
除这以外的一切都被解释为真
在一些语言中,标准的布尔值为0(表示假)和1(表示真)
>>>True+False+42
43
bool函数可以用来转换其他值
>>>bool(42)
True

is: 同一性运算符,判定是否同一个对象

>>>x=y=[1,2,3]
>>>z=[1,2,3]
>>>x==y
True
>>>x==z
True
>>>x is y
True
>>>x is z
False

断言

与其让程序晚点崩溃,不如在错误条件出现时直接让它崩溃
>>>assert 1==2,'1 !=2'

循环

并行迭代

内建的zip函数可以把两个序列压缩在一起
>>>x=['name','age','phone']
>>>y=['lr',18,110]
>>>zip(x,y)
[('name','lr'),('age',18),('phone',110)]
可以处理不等长序列,最短序列'用完'便停止

列表推导式

>>>[i+1=2 for i in range(5)]
[0,1,2,3,4]
>>>[i+1 for i in range(5)]
[1,2,3,4,5]
>>>[i for i in range(5) if i < 3]
for i in range(5):
    if i<3:
         li.append(i)
>>>[0, 1, 2]

break、continue、pass

break : 立即跳出循环结构,转而执行该结构后面的语句
continue : 立即结束本次循环,重新开始下一轮循环
pass : 该语句什么也不做,也就是说它是一个空操作

exec 执行一个字符串的语句

>>>exec "print 'hello'"
hello

eval 将字符串作为表达式运行,并返回值

>>>eval('{"a":"b"}')
{"a":"b"}