0) 引论
前面介绍了基础数据部分,本节将总结一下Python的控制流。有了基础数据以及控制流,则就可以写出一些初步的程序。可以说语言通用的部分就是基础数据和控制流,这两部分构成了一门语言最最基本的部分。控制流主要有顺序结构,if结构,循环结构。下面一一介绍。
1)赋值语句
>>> x=1
>>> x
1
除了最基本的赋值语句形式:x=1; Python还支持链式赋值,如下面所示:
>>> x=y=z=1
>>> x
1
>>> y
1
>>> z
1
>>> x,y,z=1,2,3
>>> x
1
>>> y
2
>>> z
3
而且Python中交换两个变量的值非常简单
>>> x,y=4,5
>>> x,y=y,x
>>> x
5
>>> y
4
这样的赋值方式让Python变得简单明了,但是个人觉得这些方式略显随意,不见得是很严谨的做法。
>>> people={'Arsharm':25,'Bob':13,'Cristina':45}
>>> key,value = people.popitem()
>>> key
'Cristina'
>>> value
45
>>> people
{'Bob': 13, 'Arsharm': 25}
这是字典的链式赋值举例。
Python也有增量赋值的模式,与C是一样的。
>>> x=1
>>> x+=1
>>> x
2
2) 两个运算符的比较(is 和 ==)
>>> x=y=[1,2]
>>> z=[1,2]
>>> x is y
True
>>> x==y
True
>>> x is z
False
>>> x==z
True
x is y 表示x,y是同一个对象。
x==y
表示x,y的数值与顺序都相等。
3) 逻辑运算符
and,or,not是通用的3个逻辑运算符。注意一点,逻辑表达式只有在需要求值的时候才会求值。
4) assert语句
assert语句的设计初衷是能够及时让程序在错误处停止,例如:
>>> x=-1
>>> assert 0<x<10, 'exceed the scope'
Traceback (most recent call last):
File "<pyshell#34>", line 1, in <module>
assert 0<x<10, 'exceed the scope'
AssertionError: exceed the scope
5) 条件语句
前面介绍的内容,基本是一行就能够解决了。然而对于条件语句,循环语句,则一行代码就搞不定了。这里就要用到语句块。在python中,语句块是由冒号和缩进来构成的。
if语句:
>>> if 1>0:
print('math is true')
math is true
if else语句:
>>> num=10
>>> if num>0:
print(num,'>0')
else:
print(num,'<0')
10 >0
elif语句:
>>> num=10
>>> if num>0:
print(num,'>0')
elif num==0:
print(num,'=0')
else:
print(num,'<0')
10 >0
6) 循环语句
while循环:
>>> i=1
>>> ans=0
>>> while i<=100:
ans=ans+i
i+=1
>>> ans
5050
用for循环:
>>> ans=0
>>> for i in range(0,101):
ans = ans+i
>>> ans
5050
range是内建函数,能够生成一个范围内的序列
>>> range(0,10)
range(0, 10)
>>> list(range(0,10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
跳出循环:break以及continue:
>>> ans=0
>>> for i in range(0,101):
ans=ans+i
if i>50:
break
>>> ans
1326
>>> ans=0
>>> for i in range(0,101):
if i==50:
continue
ans=ans+i
>>> ans
5000
7) 遍历字典
字典是Python中比较常见的数据结构,下面来看如何遍历字典里所有的键:
>>> dic = {'Arsharm':42,'Bob':23,'Cristina':19}
>>> for key in dic:
print(key,'is',dic[key])
Cristina is 19
Bob is 23
Arsharm is 42
8) 迭代
并行迭代,假设有两个序列
>>> name=['Arsharm','Bob','Cristina']
>>> age=[42,23,19]
>>> for i in range(len(name)):
print(name[i],'is',age[i])
Arsharm is 42
Bob is 23
Cristina is 19
利用内建的zip函数进行迭代
>>> name=['Arsharm','Bob','Cristina']
>>> age=[42,23,19]
>>> for name,age in zip(name,age):
print(name,'is',age)
Arsharm is 42
Bob is 23
Cristina is 19
9) list comprehension
不知道为什么要起这样一个名字,大概是说要对列表进行更加深入的理解吧。
书上翻译说是列表推导式,反正不管他是什么了, 它的主要目的就是利用列表实现一个类似于循环的东西。
>>> [i*i for i in range(0,10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> [n for n in name]
['Arsharm', 'Bob', 'Cristina']
>>> [a for a in age]
[42, 23, 19]
10) 其他的一些有用的语句
pass:什么都不做。pass语句的初衷是为了提前占用位置,以便后续扩展用。
del:删除。注意del删除的是名称,而不是值,在python中时没有办法真正删除值的。
>>> x=[1,2,3]
>>> y=x
>>> del x
>>> x
Traceback (most recent call last):
File "<pyshell#98>", line 1, in <module>
x
NameError: name 'x' is not defined
>>> y
[1, 2, 3]
结果显示del x后,只是把x这个变量删除,而没有真正的删除值。
exec:执行字符串方式书写
>>> exec("print('Hello World!')")
Hello World!
eval: 计算字符串形式书写的表达式
>>> eval('1+2')
3