起立马扎罗

导航

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页

posted on 2012-10-23 14:26  起立马扎罗  阅读(165)  评论(0)    收藏  举报