一、内置函数
内置函数的思维导图
1、print(self,*args,sep=' ',end='\n',file=None)
print('张颖', '张娜', '张梦', '张悦', end = ' ') # 以什么为结尾,默认是回车 # 张颖 张娜 张梦 张悦 print('张颖', '张娜', '张梦', '张悦', sep = '_') # 连接符,默认是空格 # 张颖_张娜_张梦_张悦
2、hash() 数字算出来就是数字本身,其他的数据类型算完依托很长的数字
print (hash(12345)) # 12345 print(hash('你是谁')) # 1399596852175174770
3、id() 查看内存地址
4、help() # 查看帮助
5、callable() 查看函数是否能够调用
def func(): print('as') an = '' print(callable(func)) # True print(callable(an)) # False
6、dir() 此类型的数据可以执行哪些方法(函数)
7、count() 计数
8、bin() 转化成二进制 oct() 转化成八进制 hex() 转化成十六进制
9、divmod() 计算商和余数
10、round() 如果是奇数,正常四舍五入,若是偶数 会五舍六入
11、pow() # pow(4,4) 4 的4 次方
12、 enumerate() 列出可迭代的索引和元素
lis = ['中国','美国','日本'] # for i in range(lis): # print(i,lis[i]) # enumerate(iterable[, start]) -> iterator for index, value of iterable for i, el in enumerate(lis,1): print(i,el)
13、all() any()
print(all([1, 3, 5, 'ha'])) # and print(any([1, False, None])) # or
14、zip() # 拉链函数 水桶效应
lst1 = ["赵四", "刘能", "香秀"] lst2 = ["刘晓光", "王小利"] # 水桶效应 lst3 = ["街舞", "磕巴", "哭"] z = zip(lst1, lst2, lst3) print(list(z)) #[('赵四', '刘晓光', '街舞'), ('刘能', '王小利', '磕巴')]
15、iter() 获取迭代器,内部使用的是__iter__()方法来获取迭代器
next() 迭代器函数 迭代器向下执行一次,内部实际使用了__next__()方法返回迭代器的下一个项目
二、匿名函数
匿名函数的统一的名字:<lambda>
fn = lambda a, b: a+b fn = fn(3, 4) print(fn)
使用场景:配合着sorted,map,filter
1、sorted() 排序函数,
语法:sorted(Iterable,key=None,reverse=False)
Iterable :可迭代对象
key:排序规则(排序函数),在sorted内部会将可迭代对象中的每一个元素传递给这个 函数的参数,根据函数运算的结果进行排序
reverse:是否倒叙,True:倒叙,False:正序
自己去定义排序的规则
lst = [34,56,78,32,12,34,90] print(sorted(lst))
# 按名字长度排序 names = ['张颖一','影','关谷神奇','阿苏','慕容东方晓'] def func(s): return len(s) # 返回长度 # 执行流程 # 把可迭代对象中的每一项拿出来,作为参数传递给后面的key函数 # 函数返回数字,根据数字进行排序 s = sorted(names,key=func) print(s) # ['影', '阿苏', '张颖一', '关谷神奇', '慕容东方晓'] # 另一种方法 print(sorted(names,key=lambda s : len(s)))
2、filter 过滤函数
语法:filter(function,Iterable)
function:用来筛选的函数,在filter中会自动把iterable中的元素传递给function,然后根据function返回的True或者False来判断是否保留此项数据
Iterable:可迭代对象
names = ['张颖一','张影','关谷神奇','阿苏','慕容东方晓'] # 过滤掉姓张的人 # 把可迭代对象打开,把内部元素一个一个的传递给前面的函数,由这个函数决定此项是否保留 f = filter(lambda name : not name.startswith('张'),names) print("__iter__" in dir(f)) # 可迭代对象 for el in f: print(el)
3、map 映射函数
语法:map(function,iterable)可以对可迭代对象中的每一个元素进行映射,分别去执行function
def func(e): return e ** 2 lst = [2,45,67,32,6] mp = map(func,lst) print(mp) print(list(mp)) # 用lambda m = map(lambda i : i **2 , lst) print(list(m))
# 计算两个列表中相同位置的和 lst1 = [2,4,6,8,9] lst2 = [1,3,5,7,10] m = map(lambda x,y : x + y,lst1,lst2) print(list(m))
4、eval() 执行字符串类型的代码,并返回最终结果
print(eval("2+2")) # 4 n = 8 print(eval("2+n")) # 10 def func(): print(666) eval("func()") # 666
5、exec() 执行字符串类型的代码
exec(''' for i in range(10): print(i) ''')
6、compile() 将字符串类型的代码编译,代码对象能够通过exec语句来执行或者eval()进行求职
参数说明:
1、resource 要执行的代码,动态代码片段
2、文件名,代码存在的文件名,当传入第一个的参数的时候,这个参数给空就可以了
3、模式,取值3个,
1、exec:一般放一些流程语句的时候
2、eval:resource只存放一个求值表达式
3、single:resource存放的代码由交互的时候,mode应该为single
code1 = "for i in range(10):print(i)" c1 = compile(code1,"",mode="exec") exec(c1) code2 = "1+4+8" c2 = compile(code2,"", mode="eval") a = eval(c2) print(a) code3 = "name = input('请输入你的名字:')" c3 = compile(code3,"", mode="single") exec(c3) print(exec(c3))
有返回值的字符串形式的代码用eval(),没有返回值的字符串形式的代码用exec(),一般很少用到compile()