条件&循环
if
1.支持多重条件表达式: if not warn and (system_load>=10):
2.单一语句的代码块:(如果代码块只有一行代码):if make_hard_copy:send_data_to_printer()
3.可以避免悬挂
4.elif可以替代switch/case
5.可以用成员关系和序列:
if user.cmd in ('create','delete','update'):
action='%s item'%user.cmd
else:
action='invalid choice ... try agai!'
扩展:字典获取方式
msgs={'create':'create item','delete':'delete item','update':'update item'}
default='invalid choice... try again'
action=msgs.get(user.cmd,default) 参考 dict.get(key, default=None)
6.三元操作符
smaller=x if x<y else y
while
一般:
while expression:
suite_to_repeat
计数:
count=0
while(count<9):
...
count+=1
无限循环:
while true:
....
for
for iter_var in iterable:
suite_to_repeat
iter_var迭代变量被设置为可迭代对象(序列,迭代器或其他支持迭代的对象)
- 用于序列(字符串、列表或元组)
for eachLetter in 'Names':
print 'current letter:',eachLetter
1.1 通过序列项迭代
1.2 通过序列索引迭代
1.3 使用项和索引迭代
nameList=['Donn','Shirley','Ben','Janice','David','Yen','Wendy']
for i ,eachLee in enumerate(nameList): #枚举的索引从0开始
print"%d %s Lee"%(i+1,eachLee)
- xrange 只在python2中,python3中不存在
- 与序列相关的内建函数
sorted(),reversed(),enumerate(),zip()
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存。
我们可以使用 list() 转换来输出列表。
如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。
albums=('Poe','Gaudi','Freud','Poe2')
years=(1976,1987,1990,2003)
a=sorted(albums)
print(type(a),a)
for album in sorted(albums):
print(album)
结果:
<class 'list'> ['Freud', 'Gaudi', 'Poe', 'Poe2']
Freud
Gaudi
Poe
Poe2
albums=('Poe','Gaudi','Freud','Poe2')
years=(1976,1987,1990,2003)
for i,album in enumerate(albums):
print(i,album)
结果:
0 Poe
1 Gaudi
2 Freud
3 Poe2
albums=('Poe','Gaudi','Freud','Poe2')
years=(1976,1987,1990,2003)
c = zip(albums,years)
print('c is',c,'\n',type(c),'\n',list(c))
for album,yr in zip(albums,years):
print(yr,album)
结果:
c is <zip object at 0x0000022CB872E988>
<class 'zip'>
[('Poe', 1976), ('Gaudi', 1987), ('Freud', 1990), ('Poe2', 2003)]
1976 Poe
1987 Gaudi
1990 Freud
2003 Poe2
albums=('Poe','Gaudi','Freud','Poe2')
years=(1976,1987,1990,2003)
b=reversed(albums)
print(type(b),b)
for album in reversed(albums):
print(album)
结果:
<class 'reversed'> <reversed object at 0x000001918953B358>
Poe2
Freud
Gaudi
Poe