匿名函数、内置函数
6.17 匿名函数
# 匿名就是没有名字 def func(x,y,z=1): return x+y+z # 匿名 lambda x,y,z=1:x+y+z #与函数有相同的作用域,但是匿名意味着引用计数为0,使用一次就释放,除非让其有名字 func=lambda x,y,z=1:x+y+z func(1,2,3) #让其有名字就没有意义
#有名函数与匿名函数的对比:
有名函数:循环使用,保存了名字,通过名字就可以重复引用函数功能
匿名函数:一次性使用,随时随时定义
应用:max,min,sorted,map,reduce,filter
6.18 内置函数
更多内置函数:https://docs.python.org/3/library/functions.html?highlight=built#ascii
# zip 拉链函数 l1=[1,2,3] s1='hello' res=zip(l1,s1) #合并多个可迭代对象成元组 print(list(res)) #迭代器可以用list和next来查看 [(1, 'h'), (2, 'e'), (3, 'l')] res=zip(salaries.values(),salaries.keys()) #把values放在前面 max会取values的最大值 print(max(res)[1]) # max salaries={ 'egon':3000, 'alex':100000000, 'wupeiqi':10000, 'yuanhao':2000 } def f1(k): return salaries[k] print(max(salaries,key=lambda k:salaries[k])) #key后面指定一个功能 迭代出的结果传给key print(min(salaries,key=lambda k:salaries[k])) # sorted print(sorted(salaries,key=lambda k:salaries[k])) print(sorted(salaries,key=lambda k:salaries[k],reverse=True)) #反序 #map l=['alex','wupeiqi','yuanhao','huanghongwei'] print(list(map(lambda x:x+'_SB',l))) #映射函数 功能放第一位置 #reduce from functools import reduce print(reduce(lambda x,y:x+y,range(1,101),100)) #合并函数 最后为初始值 5150 #filter l=['alex_SB','wupeiqi_SB','yuuanhao_SB','hhw','egon'] res=filter(lambda name:name.endswith('SB'),l) #过滤函数 print(list(res))
# 优先掌握 max #最大 min #最小 sorted #排序 map #映射 from _functools import reduce #合并 filter #过滤 sum #总和 bool #布尔 布尔值为假:0,None,空 chr #转ascii divmod #显示商和余数的一个元组 enumerate #索引+值 id #id优先看内存地址 input #输入 print #打印 isinstance #是否是某类型 iter #迭代对象 len #长度 open #文件打开 pow #先幂次方后取余 type #类型 zip #拉链函数 dict,int,list,tuple,str,float,set,frozenset,complex #数据类型 #面向对象 classmethod staticmethod property getattr hasattr setattr delattr super isinstance issubclass object.__dict__
#其他内置函数 #abs print(abs(-1)) #求绝对值 #all print(all([1,'a',[]])) #返回迭代对象的所有值都是True则返回True 可迭代对象为空也是True print(all([])) #可迭代对象为空也是True # any print(any([0,None,'',1])) #True 只要1个为真 就返回True 和all相对 print(any([])) #False 和all相反 #bin , oct , hex print(bin(10)) #十进制转二进制 0b1010 print(oct(10)) #十进制转八进制 0o12 print(hex(10)) #十进制转十六进制 0xa #布尔值为假:0,None,空 bool() #bytes print('hello'.encode('utf-8')) print(bytes('hello',encoding='utf-8')) #字节串 #callable print(callable(max)) #判断是否被调用 #chr , ord print(chr(65)) #按ascii 把数字转字符 print(ord('A')) #字符转数字 #complex复数 x=1-2j #x=complex(1-2j) print(type(x)) print(x.real) #实部 print(x.imag) #虚部 #数据类型: dict,int,list,tuple,str,float,set,frozenset,complex s=set({1,2,3}) #可变集合 s=frozenset({1,2,3}) #不可变集合 #dir import time print(dir(time)) #列出time的属性 #divmod print(divmod(1001,25)) #(40,1) 相除显示商和余数 #enumerate l=['a','b','c','d'] for x in enumerate(l): #元组(索引,值) print(x) #hash print(hash('asdfasdfasdfasdfasdf')) #哈希 print(hash(' asdfasdfasdfasdfasdf')) #help def func(): ''' xxxxxx :return: ''' pass print(help(func)) #isinstance print(isinstance(1,int)) print(type(1) is int) #pow print(pow(10,2,3)) #10**2%3 幂次方后取余 #str print(str({'a':1})) #转换为字符串类型 repr一般不用 #reversed l=[1,4,2,9] print(list(reversed(l))) #反转 #round print(round(10.55545,3)) #保留3位小数点,四舍五入 #slice l1=['a','b','c','d','e'] l2=['a','b','c','d','e'] print(l1[1:5:2]) #'b','d' print(l2[1:5:2]) #'b','d' obj=slice(1,5,2) #切片可以重用 基本不用 print(l1[obj]) print(l2[obj]) #sum print(sum([1,2,3,4])) #后面是可迭代对象 print(sum(range(10))) #vars print(vars() is locals()) #vars(obj) 等同于obj.__dict__ x=111111111111111111111111111111111111111 print(locals()) #只是绑定关系 #import , __import_ import "time" #import 不能导入字符串 m=input('>>: ') print(type(m)) obj=__import__(m) #导入的是字符串 obj.sleep(3) #了解:compile ,exec ,eval #eval:提取字符串内的表达式执行,然后返回执行结果 # s1="1+2+3" s1="['a','b','c']" l=eval(s1) print(type(l)) #<class ‘list’> s2="for i in range(10):print(i)" eval(s2) #exec:仅仅只是执行字符串内的表达式或语句,没有返回值 s1="1+2+3" print(exec(s1)) #None 没有返回值 s2="for i in range(10):print(i)" exec(s2) #正常输出 #compile(str,filename,kind) # filename:用于追踪str来自于哪个文件,如果不想追踪就可以不定义 # kind可以是:single代表一条语句,exec代表一组语句,eval代表一个表达式 s='for i in range(10):print(i)' code=compile(s,'','exec') #把s编译成可以exec执行的语句 exec(code) s='1+2+3' code=compile(s,'','eval') eval(code)