第5章 条件、循环及其他语句
1.print 和 import
print
打印多个参数(,分隔)自动添加空格 ;
+ 合并字符串 ;
seq参数 自定义分隔符
import
导入时重命名(as)
如:from math import sqrt as foobar
foobar(4)
2.赋值魔法
1.同时赋值:
x,y,z = 1,2,3
x,y = y,x #这会交换x,y的值
这种操作称为序列解包:将一个序列解包,并将得到的值存储到一系列变量中。
要解包元素必须和左边的目标个数相同
使用*收集多余的值,就不用确保个数相同:
a,b, *rest = [1,2,3,4]
#1.*变量的位置任意,2.带*的变量将包含列表
2.链式赋值
x = y = func()
#等价 y = func()
x = y
3. 增强赋值(复合赋值)
x += 1
x *= 2
3. 代码块
代码块是一组语句。代码块使用缩进代码来创建。
同一代码块中,各行代码的缩进量必须相同。
4.条件和条件语句
1.bool 值
bool 表达式 视为假值的有:
False None 0 "" () [] {}
除此之外皆是真值
2.if语句(有条件地执行)
3.else子句
4.elif子句(else if)
5.代码块嵌套(把if语句放在其他if语句中)
6.更复杂的条件
1.比较运算符
除了常见的< > == 等等
还有is, is not, in , not in
#不同与C,python支持链式比较:如:0<x<100
2.布尔运算符
and or not
#和C类似,python也存在逻辑短路现象
7.断言assert
5.循环
1.while循环
2.for循环
为序列执行代码块:
words = ['this', 'is', 'an', 'ex', 'parrot']
for word in words:
print(word)
创建范围的内置函数 range()
3.迭代字典
for key, value in d.items():
print(key, 'corresponds to', value)
4.一些迭代工具
1.并行迭代,内置函数zip 将两个序列缝合起来,返回元组组成的序列。
2.迭代时获取索引 enumerate
for index, string in enumerate(strings):
if 'xxx' in string:
strings[index] = '[censored]'
3.反向迭代和排序后迭代
reversed 和 sorted
5跳出循环
1.break 跳出迭代(本层)
2.continue 结束当前迭代(本次)
6.循环中的else语句
6.简单推导
列表推导是一种从其他列表创建列表的方式。
[x*x for x in range(10)]
添加条件
[x*x for x in range(10) if x%3 == 0]
字典推导
>>> squares = {i:"{} squared is {}".format(i, i**2) for i in range(10)}
>>> squares[8]
'8 squared is 64'
7.pass del 和 exec
1.什么都不做pass
2.del 删除(通常python会自动做)
3.exec 将字符串作为代码执行
给exec添加第二个参数--字典,用作其命名空间
from math import sqrt
>>> scope = {}
>>> exec('sqrt = 1', scope)
eval 计算字符串表示的值
也能传给它第二个参数做命名空间
第5章出现的函数:
chr(n) 返回一个字符串,其中只包含一个字符,这个字符对应于传入的顺序值n(0 ≤n < 256)
eval(source[,globals[,locals]]) 计算并返回字符串表示的表达式的结果
exec(source[, globals[, locals]]) 将字符串作为语句执行
enumerate(seq) 生成可迭代的索引值对
ord(c) 接受一个只包含一个字符的字符串,并返回这个字符的顺序值(一个整数)
range([start,] stop[, step]) 创建一个由整数组成的列表
reversed(seq) 按相反的顺序返回seq中的值,以便用于迭代
sorted(seq[,cmp][,key][,reverse]) 返回一个列表,其中包含seq中的所有值且这些值是经过排序的
xrange([start,] stop[, step]) 创建一个用于迭代的xrange对象
zip(seq1, seq2,...) 创建一个适合用于并行迭代的新序列