Learning Python 10.19
发现statements这部分好像没什么好写的,因为前面都是简单的if else、for、while这种。无非是说明python是依赖缩进来表示语句层次关系的,而不是一层层的括号。需要强调的只有,在代码里需要统一缩进的符号(使用Tab或者4个空格或者8个空格需要统一)。
extended sequence unpacking:相对于a,b =1,2; python还有更强大的extended sequence unpacking,用于多个目标赋给少数值的时候
1 seq = [1,2,3,4] 2 a, *b = seq 3 *c, d = seq 4 *e, =seq #illegal without the comma 5 f, *g, h = seq 6 print(a,"|",b,"|",c,"|",d,"|",e,"|",f,"|",g,"|",h) 7 #1 | [2, 3, 4] | [1, 2, 3] | 4 | [1, 2, 3, 4] | 1 | [2, 3] | 4
multiple-target assignments:共享引用,所以用于可变对象时要注意
1 a = b = [] 2 b.append(42) 3 print(a, b) 4 #[42] [42] 5 c = d = "hello" 6 d = "hi" 7 print(c, d) 8 #hello hi
对于可变对象,如list和dict,a=a+1和a+=1意义并不相同。后者是一个原地修改(效率更高,但是会引用与其共享引用的变量。因为在python中,+和+=是分别重载的,而并非a+=1只是a=a+1的简写
1 L = [1, 2] 2 M = L # L and M reference the same object 3 L = L + [3, 4] # Concatenation makes a new object 4 print(L, M) # Changes L but not M 5 #[1, 2, 3, 4] [1, 2] 6 L = [1, 2] 7 M = L 8 L += [3, 4] # But += really means extend 9 print(L, M) # M sees the in-place change too! 10 #[1, 2, 3, 4] [1, 2, 3, 4]
形如_x, __x, __x__, _的名字有其特殊含义,后面会详述。
print()语句的默认输出是sys.stdout,可以sys.stdout("log.txt", "a"),使print()自动重定向,也可使用print()里的file参数。
至363页
浙公网安备 33010602011771号