Pyhton编程技巧-namedtuple,切片,生成器,列表生成式。。。
1 # coding=utf-8 2 from collections import namedtuple 3 4 ##NAME, AGE, SEX, EMAIL分别赋值为0,1,2,3 5 NAME, AGE, SEX, EMAIL = xrange(4) 6 print(NAME) 7 8 stu = ("zhangsan", 18, "男", "abc@abc.com") 9 print(stu[NAME]) 10 11 Student = namedtuple("Student", ["NAME", "AGE", "SEX", "EMAIL"]) 12 stu1 = Student("lisi", 181, "男1", "abc@abc.com1") 13 print(stu1.NAME) 14 15 # 切片 16 str = 'abcdefg' 17 # 开始是0的话可以省略,:不可以省略 18 print(str[:2]) # ab 19 # 结束是最后的话可以省略,:不可以省略 20 print (str[1:]) # bcdefg 21 # 第二个:后的数据表示取值步长 22 print (str[::2]) # aceg 23 # 负数表示倒数 24 print (str[-2:]) # fg 25 26 ###range和xrange 27 # range返回的是一个列表 28 r = range(0, 100, 10) 29 print(r) 30 # xrange 返回的是一个xrange对象,xrange对象是可遍历的 31 xr = xrange(0, 100, 20) 32 print(xr) 33 for x in xr: 34 print x 35 36 ##列表生成式 37 38 # 生成新的列表 39 pf = [x * x for x in (range(0, 10)) if x % 2 == 0] 40 print(pf) 41 42 ##dict生成式 43 # 利用列表生成新的dict 44 di = {x: ("%x*%x" % (x, x)) for x in (range(0, 10))} 45 print(di) 46 47 # 两层循环 48 49 du = [x + y for x in 'abc' for y in 'xyz'] 50 print(du) 51 52 dudict = {x: y for x in 'abc' for y in 'xyz'} 53 print(dudict) 54 55 # for循环可以有多个变量 56 # for循环二个变量 57 ddd = {"x": 1, "y": 2, "z": 3} 58 for k, v in ddd.items(): 59 print ("%s=%s" % (k, v)) 60 61 print(ddd.items()) 62 # for循环三个变量 63 dss = [('a', 'b', 'c'), (1, 2, 3), ('x', 'y', 'z')] 64 print(dss) 65 for x, y, z in dss: 66 print ("%s:%s:%s" % (x, y, z)) 67 68 ###生成器### 69 ##方法一:将列表生成式的[],n改成() 70 g1 = (x * x for x in range(0, 10)) 71 print(g1) 72 print(g1.next()) 73 for g in g1: 74 print(g) 75 76 77 ##方法二:yield语句 78 # 函数是顺序执行,遇到return语句或者最后一行函数语句就返回。 79 # 而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回, 80 # 再次执行时从上次返回的yield语句处继续执行。 81 82 def fib(max): 83 n, a, b = 0, 0, 1 84 while (n < max): 85 yield b 86 a, b = b, a + b 87 n = n + 1 88 89 90 fib10 = fib(10) 91 print(fib10.next()) 92 print(fib10.next()) 93 print("======") 94 for f in fib10: 95 print(f) 96 97 print('======End=====')