day08-内置函数和匿名函数
1 1. 1)网络编程只能是二进制。2)照片和视频也是以二进制储存。 3)html网页爬取到的也是二进制编码。 2 3 2. 非常重要的4个内置函数:zip ,filter,map,sorted 4 1)zip: 5 例子1: 6 l1 = [1,2,3] 7 l2 = ['a','b','c'] 8 for i in zip(l1,l2): # zip(l1,l2) 是迭代器。拉链方法。 9 print(i)
#(1,'a')
#(2,'b')
10 11 例子2:把下面表格打印出来。 12 # name age salary 13 # tom 18 10000 14 # marry 20 30000 15 # alex 35 1000000 16 例子2.1 17 name = ('tom','marry','alex') 18 age = (18,20,35) 19 salary = (10000,30000,1000000) 20 for a,b,c in zip(name,age,salary): 21 print(a,b,c)
#tom 18 10000
#marry 20 30000
#alex 35 1000000
22 例子2.2 23 dic1 = {'name':'tom','age':18,'salary':10000} 24 dic2 = {'name':'marry','age':20,'salary':30000} 25 dic3 = {'name':'alex','age':35,'salary':1000000} 26 lis = [dic1,dic2,dic3] 27 for i in lis: 28 print('{0},{1},{2}'.format(i['name'],i['age'],i['salary']))
29 例子2.3 30 dic1 = dict(name = 'tom',age = 18,salary = 10000) 31 dic2 = dict(name = 'marry',age = 20, salary = 30000) 32 dic3 = dict(name = 'alex',age = 35,salary = 1000000) 33 lis = [dic1,dic2,dic3] 34 for i in lis: 35 print(i['name'],i['age'],i['salary']) 36 37 38 2) filter: 筛选。ret = filter(被调用的函数,实参),filter调用函数,把实参传入函数执行代码,筛选出可以让表达式为True的实参,ret接收实参。 39 例子1:把奇数筛选出来。 40 def func(x): 41 return x % 2 == 1 #当表达式为True,ret才接收筛选过的实参。 42 ret = filter(func,[1,2,3]) # ret 是迭代器。filter调用函数func,把实参[1,2,3]循环传入函数func。 43 for i in ret: 44 print(i) 45 例子2:把字符串筛选出来。 46 def is_str(s): 47 if type(s) == str: 48 return True # 还可以这样写: return type(s) == str 49 ret = filter(is_str,[1,'hello',4,36,'python']) 50 for i in ret: 51 print(i) 52 例子3:筛选列表中不是空白的元素(空字符串,空列表,空格,None等等),然后把它们存放在新列表中。注意:' '空格这个字符串为True。 53 def is_not_empty(s): 54 return s and str(s).strip() #当s and str(s).strip()为True时,ret才接收实参。因为当s是整数1,2,5,6,是int,没有strip属性,所以使用str(s)把int 55 ret = filter(is_not_empty,[1,2,'as','',[],' ',5,6,None]) #强转为str。 56 l = [] 57 for i in ret: 58 l.append(i) 59 print(l) 60 61 3) map: 62 ret = map(abs,[-1,20,90,-18]) # map调用abs绝对值函数,把实参传入到abs函数里面取绝对值,然后ret接收。ret是迭代器。 63 for i in ret: 64 print(i) 65 66 filter:ret接收实参<=总个数,但不会改变实参的值。map:ret接收实参等于总个数,但可能改变实参的值。 67 68 4) sorted: 69 例子1: 70 l = [-1,20,2,-10] 71 l.sort(key=abs) #按绝对值的大小从小到大排序,不产生新的对象。 72 print(l) 73 例子2: 74 l = [-1,20,2,-10] 75 l.sort() 76 print(l) #从小到大排序,不产生新的对象。 77 print(sorted(l)) #产生新的对象。可以使用print(id(l))和print(id(sorted(l)))查询是否产生新对象。以上两种方法的执行结果都是[-10, -1, 2, 20]。 78 例子3: 79 print(sorted(l,reverse=True)) #reverse=True把sorted(l)排序反转。 80 print(sorted(l,key=abs,reverse=True)) #按绝对值排序,接着反转。 81 例子4: 82 l = ['a','asdfasdf','asdf','aa',' '] 83 ret = sorted(l) 84 print(ret) # 执行结果:[' ', 'a', 'aa', 'asdf', 'asdfasdf'] 85 例子5: 86 l = ['a','asdfasdf','asdf','aa',' '] 87 ret = sorted(l,key=len) # 按字符长度进行排序 88 print(ret) # 执行结果:['a', 'aa', 'asdf', ' ', 'asdfasdf'] 89 90 91 a = list(range(100)[0:3]) #range(100)切片取前面三个元素,然后强转为list。 92 for i in a : 93 print(i) 94 95 96 2.匿名函数: 97 1)参数可以有多个,使用逗号隔开;只写一行;返回值可以是任何数据类型。 98 lamb = lambda x,y : x+y # x+y是返回值 99 print(lamb(1,2)) 100 101 2)匿名函数面试题: 102 A = lambda x : x*2 103 B = lambda x : x*4 104 x = 2 105 x = A(x) # x = 4 106 x = B(x) # x = 16 107 x = A(x) # x = 32 108 print(x) #执行结果是32