1.序列解包
当函数或方法返回元组(或其他序列或可迭代对象时),可使用该特性
#分别赋值
x,y,z=1,2,3
x,y=[1,2]
x,y=(1,2)
x,y={'ti':2,'an':4} #x:'ti' y:'an',只返回键
#交换变量值
x,y=y,x
print(x,y,z) #2 1 3
#定义字典并随机弹出键值对,序列解包给m,n
x=dict()
x[12]=['12',12,'12']
x['tt']='12'
x.popitem() --返回一个元组(键+键值)
m,n=x.popitem()
m,n,*q=[1,2,3,4] #q为列表[3,4]
*q,m,n=[1,2,3,4] #q为列表[1,2]
2.链式赋值
x=y=2
#等价于
x=2
y=x
3.条件执行与if语句
x=int(input("enter number:"))
if x>12:
print(1)
elif (x>5 and x<=8):
print(12)
else:
print(50)
4.语句中设置断点
#确保程序中某个条件必须为真才能继续运行
assert expression1 expression2 #检查表达式expression1的正确性,True则继续运行,False则返回表达式expression2的值(expression2为字符串时则直接返回,为表达式时返回布尔值)
a=2
assert 10<a,"a must bigger than 10"
g=100
#断点返回True
a=2;b=1
assert a>5,b>0
c=23
5.循环中的else子句
from math import sqrt
else_print=False
for j in range(99,81,-1):
if sqrt(j)==int(sqrt(j)):
else_print=True
print(j)
break
if not else_print:
print('not found')
#上面的条件判断语句可修改为
#循环(while或for循环均可)中增加else子句,仅在没有调用break语句时执行
from math import sqrt
for j in range(99,81,-1):
if sqrt(j)==int(sqrt(j)):
print(j)
break
else:
print('not found')
6.列表推导式
列表推导式是利用其它列表创建新的列表,工作方式类似于for循环
[x*x for x in range(10)]
#只打印range(10)元素中平方能被3整除的数
[x*x for x in range(10) if (x**2 % 3==0)]
#增加更多的for语句
[(x,y) for x in range(2) for y in range(3)]
#输出[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)]
[(x,y) for x in range(2) for y in range(3) if x==y] #[(0, 0), (1, 1)]
#筛选girls列表和boys列表中首字母相同的集合
girls=['ab','ah','cd','gg']
boys=['ac','gd','yy']
lettersgirls={}
for girl in girls:
lettersgirls.setdefault(girl[0],[]).append(girl)
print([b+'+'+lettersgirls[g][0] for b in boys for g in lettersgirls if b[0]==g])
girls=['ab','ah','cd','gg']
boys=['ac','gd','yy']
lettersgirls={}
for girl in girls:
lettersgirls.setdefault(girl[0],[]).append(girl)
print([value for b in boys for (key,value) in lettersgirls.items() if b[0]==key])
#输出[['ab', 'ah'], ['gg']]
7.pass语句
程序什么事情都不用做,pass语句可在程序中起到占位符的作用(在Python中空代码块是非法的)
name='gg'
if name=='pp':
print(name)
elif name=='ppp':
pass
elif name=='gg':
print('haha')
8.del语句剖析
tian={'gg':1,'pp':2}
tian_tem=tian
tian=[1,2,3]
del tian_tem['pp']
del tian[0]
print(tian_tem)
print(tian)
#tian与tian_tem被绑定到同一字典上,但将tian设置为新列表时,字典通过tian_tem仍然是可用的
#{'gg': 1, 'pp': 2}
但如果将tian_tem也设置为新对象,字典就飘在内存中(没有与任何对象名字绑定),Python解释器会直接删除该字典
del语句不仅会移除对象引用,也会移除对象名字本身
tian=tian_tem=[1,2]
tian[1]=3
del tian
print(tian_tem)
#[1,3]
9.exec+eval
9.1.exec
exec函数以执行Python程序相同的方式来执行字符串,即执行一系列Python语句但不返回任何对象,因为其本身就是语句
为防止命名空间的相互干扰,可增加一个字典起到命名空间的作用
from math import sqrt
sqrt(4)
scope={}
exec("scope['sqrt']=1")
print(scope)
#或可使用以下简洁方式,scope是作用域
from math import sqrt
print(sqrt(4))
scope={}
exec("sqrt=1",scope)
print(scope['sqrt'])
9.2.eval
eval计算Python表达式并返回结果值
#scope是作用域
scope={}
exec('x=2',scope)
print(eval('x*x',scope))