迭代器: def gen(): a = 100 yield a a = a * 8 yield a yield 1000 for i in gen(): print(i) 创建一个函数,循环体,yield循环到此就返回一个值。调用函数,打印出循环结果: 100 800 1000 表推导: L = [x**2 for x in range(10)] print(L) 等价于: M = [] for x in range(10): M.append(x**2) print(M) 打印出结果:[0, 1, 4, 9, 16, 25, 36, 49, 64, 81] xl = [1,3,5] yl = [9,12,13] L = [ x**2 for (x,y) in zip(xl,yl) if y > 10] print(L) 等价于 for (x,y) in zip(xl,yl): if y > 10: print(x) 我们可以先打印出zip对应的Y值大于10的X的值 打印出X的值: >>3 >>5 打印出L的值:[9, 25]
#lambda函数 def test(f,a,b): print ('test') print(f(a,b)) test((lambda x,y:x**2+y),6,9) #使用lambda匿名函数给f参数传递值,可以使不同形式的。 打印结果: >>test (f(a,b))相当于a=6传递给x,b=9传递给y,组合成f的值 >>45 #map() re = map((lambda x:x+3),[1,3,5,7]) print(list(re)) #map中的一个参数x,将后面列表中的值一次传递给x,相当于列表的值依次加3,在取值中以列表的形式。 打印结果: [4, 6, 8, 10] re2 = map((lambda m,n:m**n),[1,2,3,4],[5,6,7,8]) print(list(re2)) 打印结果: [1, 64, 2187, 65536] #filter() def abc(a): if a > 100: return True else: return False newlist = filter(abc,[100,30,101,200]) print(list(newlist)) #创建一个函数abc中有一个参数a。newlist中函数filter将列表的值一次传给函数abc中的参数a,取值用列表形式。 打印结果: [101, 200] #reduce() #from functools import reduce #因为python不支持reduce函数,可以在functools库中导入单个reduce函数 import functools #可以直接导入整个库 print(functools.reduce(lambda x,y:x+y,range(1,101))) #reduce函数是将列表中的值的第一次传递两个参数相加的和3,在传递一个参数3相加。相当于1-100相加的和。 打印结果: >>5050