函数之内置函数、匿名函数
一、内置函数
Python内置函数
共68个
常用内置函数方法:
1、print
print('666',end='') print('666') print(1,2,3,4,5,sep='|') 666666 1|2|3|4|5
2、dir--查找对象的所有方法
print(dir(str)) ['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
3、locals() 将局部的变量储存起来
globals() 将全局的变量,函数名,等等 储存起来
def func(): name = 'alex' print(locals()) print(globals()) func()
4、help()----将你查询的对象所有信息都拿出来
help(list)--可以吧列表的所有用法信息都输出出来
5、abs()----取绝对值
print(abs(-1)) print(abs(1)) def func(ret): print(44) 最大值 ret = max(1,2,-3,key=abs) print(ret)------ -3 #最小值 ret = min([1,2,3]) print(ret)------ 1 #sum iterable,初始值 ret = sum([1,2,3],10) print(ret)------ 16
6、callable---- 判断此变量是不是函数名
ex' print(callable(name))----Flase def func(): print(666) print(callable(func))-----Ture
7、hash()-----通过哈希表的规则,将对象转换成哈希值
sdsafsda')) print(hash('fdsdsafsda')) print(hash('dsakhdsafsda')) print(hash(('a','b'))) print(hash((1,2,3,4))) print(hash(True)) 296489663101503432 8617324162733013048 4412082193174092575 1676122611624852323 7917385612527620386 485696759010151909 1
8 、all()----可迭代对象里面的所有的值转化成bool值如果都是True则,返回True
print(all([1,2,3,0])) False
9、十进制与二进制十六进制转化
十进制转化成二进制 print(bin(100))--------------0b1100100 #将十进制转化成八进制 print(oct(9))-----------------0o11 #将十进制转化成十六进制 print(hex(33))--------------0x21
10、float()----数据类型中浮点
有限小数,无线循环小数,不包含(无线不循环小数)
print(1.35432,type(1.35432)) print(float(3)) 1.35432 <class 'float'> 3.0
11、enumerate (iterable,start 起始值) 枚举
l = ['手机','电话','充气娃娃',] for i in enumerate(l,1): print(i) (1, '手机') (2, '电话') (3, '充气娃娃') l = ['手机','电话','充气娃娃',] for k,v in enumerate(l,1): print(k,v) 1 手机 2 电话 3 充气娃娃
12、eval() 有返回值 除去字符串两边的引号,返回里面的内容
13、exec() 没有返回值 除去字符串两边的引号,执行里面的代码
两者区别:
s = "{'name':'alex'}" s1 = "1+2+3+4" print(eval(s),type(eval(s))) print(exec(s),type(exec(s))) print(eval(s1),type(eval(s1))) # {'name': 'alex'} <class 'dict'> # None <class 'NoneType'> # 10 <class 'int'>
code = '''for i in range(10): print(i)''' print(exec(code)) 0 1 2 3 4 5 6 7 8 9 None
14、ord() 输入字符返回Unicode对应的编码位置
print(ord('a')) print(ord('b')) print(ord('中')) 97 98 20013
15、chr()输入编码位置返回Unicode对应的字符
print(chr(97)) print(chr(20013)) a 中
16、ASCII()
print(ascii('a')) print(ascii('国')) # \u 'a' '\u56fd'
17、%r repr 原形毕露
name = 'alex%r'%('sb') print(name) print(repr('[1,2]')) alex'sb' '[1,2]'
18、slice() 切片
l1 = [11,22,33,44] print(l1[1::2]) 【22,44】 sl = slice(1,4,2) print(l1[sl]) 【22,44】 等同
19、reversed() (翻转) 形成一个行的迭代器
l1 = [11,33,22,44,'alex'] l2 = reversed(l1) for i in l2: print(i) alex 44 22 33 11
20、max()里面可以加函数,以函数规则返回最大值
dic = {'k1':20,'k2':30,'k3':100} def func(x): return dic[x] l1 = max(dic,key=func,) print(l1) #k3 dic = {3:20,2:30,1:100} def func(x): return x l1 = max(dic,key=func,) print(l1) #3
重要的内置函数
20、zip() 拉链方法------可以放置多个可迭代对象,以最少的可迭代对象的个数为基准,返回一个迭代器
l1 = [1,2,3,4,5] l2 = ['wusir','alex','taibai'] l3 = ['*',"**"] print(zip(l1,l2)) print(isinstance(zip(l1,l2),Iterator)) for i in zip(l1,l2,l3): print(i) <zip object at 0x00000000028AC648> True (1, 'wusir', '*') (2, 'alex', '**')
21、map()---可迭代对象
-------相当于推导式循环模式---[i*i for i in range(5)]
print(map(abs,[1,2,3,-4,-5,-7])) for i in map(abs,[1,2,3,-4,-5,-7]): print(i) <map object at 0x00000000021472B0> 1 2 3 4 5 7
def func(x):return x*x for i in map(func,range(5)): print(i) 0 1 4 9 16
22、filter() (过滤、筛选)----可迭代对象
-------相当于推导式的筛选模式---[i for i in [1,2,3,4,5] if i % 2 == 0]
def func1(x):return x % 2 == 0 for i in filter(func1,[1,2,3,4,5]): print(i) 2 4
23、sord()(排序)---返回的是一个新列表
l1 = [1,4,3,5,7,8] print(sorted(l1,)) print(l1) [1, 3, 4, 5, 7, 8] [1, 4, 3, 5, 7, 8]
括号内可加函数,按照函数的规则排序
l = ['fsdafsa','fddsaf','qqq','fgasjdlg;dsjfg'] def func1(x): return len(x) for i in sorted(l,key=func1): print(i) print(sorted(l,key=len)) # qqq fddsaf fsdafsa fgasjdlg;dsjfg ['qqq', 'fddsaf', 'fsdafsa', 'fgasjdlg;dsjfg']
总结:
都是带key的 : zip max min map filter 返回的是迭代器 sorted 返回的是列表,一般与匿名函数lambda搭配使用
24、bytes()
s = '中国'.encode('utf-8') #编码 print(s) # s.decode('utf-8') #解码
# s gbk的bytes ---> utf-8的bytes
s = b'\xd6\xd0\xb9\xfa' s1 = s.decode('gbk').encode('utf-8') print(s1) b'\xe4\xb8\xad\xe5\x9b\xbd'
# s = '中国'.encode('utf-8') #编码 # s = '中国' # s= bytes(s,encoding='utf-8').decode('utf-8') # print(s)
二、匿名函数
lambda
func = lambda x:x func1 = lambda x,y:x+y
应用:
def func(x):return x*x for i in map(lambda x:x*x,[0,1,2,3,4]): print(i) 0 1 4 9 16
l1 = ['234','12','fsdafa','fdsagag'] for i in filter(lambda x:len(x) >= 3,l1): print(i) 234 fsdafa fdsagag
例题1、
d = lambda x:x*2 t = lambda x:x*3 x = 2 x = d(x) x = t(x) x = d(x) print(x) x --24
例题2、
现在有两元祖(('a'),('b')),(('c'),('d')),请使用python 中的匿名函数生成列
表[{'a':'c'},{'b':'d'}]
tu1 = (('a'),('b')) tu2 = (('c'),('d')) func = lambda x,y:[{x[0]:y[0]},{x[1]:y[1]}] print(func(tu1,tu2))
# [{'a': 'c'}, {'b': 'd'}]
注:
tu1 = (('a'),('b')) tu2 = (2) print(tu2)--------2 print(tu1)--------(‘a’,‘b’)
匿名函数后可以跟 三元运算
func()= lambda x,y: x if x > 3 else y