day 13 内置函数
内置函数
https://www.processon.com/mindmap/5c10b787e4b0c2ee256a7c35
什么是内置函数,就是python给你提供的,拿来直接用的函数,比如print,input等等,截止到python.3.6.2版本一共给我们提供了68个内置函数.
abs() | dict() | help() | min() | setattr() |
all() | dir() | hex() | next() | slice() |
any() | divmod() | id() | object() | sorted() |
ascii() | enumerate() | input() | oct() | staticmethod() |
bin() | eval() | int() | open() | str() |
bool() | exec() | isinstance() | ord() | sum() |
bytearray() | filter() | issubclass() | pow() | super() |
bytes() | float() | iter() | print() | tuple() |
callable() | format() | len() | property() | type() |
chr() | frozenset() | list() | range() | vars() |
classmethod() | getattr() | locals() | repr() | zip() |
compile() | globals() | map() | reversed() | __import__() |
complex() | hasattr() | max() | round() | |
delattr() | hash() | memoryview() | set() |
1.内存相关:hash,id
hash 必须是不可变的
id 查看内存地址的
2.调用相关:callable(重要)
查看一个函数是否是可调用的,可调用: =-> (),能加括号的都是可调用
def func(): pass func() print(callable(func)) #Ture 为可调用的
3.字符串相关:dir,eval,compile
dir:查看此类型的数据可以执行 哪些方法
print(dir("你好"))
eval:执行字符串类型的代码. 并返回最终结果
print(eval("2+2")) # 4 n = 8 print(eval("2+n")) # 10 def func(): print(666) eval("func()") # 666
exec: 执行字符串类型的代码
exec(""" for i in range(10): print(i) """) exec(""" def func(): print("我是周杰伦") func() """)
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+2+3" c2 = compile(code2, "", mode="eval") a = eval(c2)print(a) code3 = "name = input('请输入你的名字:')" c3 = compile(code3, "", mode="single") exec(c3) print(name) 有返回值的字符串形式的代码⽤eval(). 没有返回值的字符串形式的代码用exec(). 一般很少用 到compile()
4.数学相关:sum,divmod,round,pow
sum:求和
print(sum([1,2,3,4])) #10
divmod:计算商和余数
print(divmod(20,3)) #(6,2)
round:整数是奇数 ->正常四舍五入 ,偶数 -> 五舍六入
pow:求次方
print(pow(2,3)) #8
5.和数据结构相关:enumerate,zip,sort,lambda,sorted,filter,reversed,map
enumerate:枚举
lst = ["篮球",'足球','摔跤',"挤公交"] for i,el in enumerate(lst,100): print(i,el) ## 100 篮球 101 足球 102 摔跤 103 挤公交
zip:拉链函数
lst1 = ["赵四","刘能","香秀"] lst2 = ["刘晓光","王晓丽","不知道"] lst3 = ["街舞","磕巴","哭"] z = zip(lst1,lst2,lst3) print("__iter__" in dir(z)) #判断是否是可迭代对象 True for el in z: print(el) ### ('赵四', '刘晓光', '街舞') ('刘能', '王晓丽', '磕巴') ('香秀', '不知道', '哭')
sort:排序(升序,降序)
lst = [1,323,2321,421,432,] lst.sort(reverse=True) print(lst) ### [2321, 432, 421, 323, 1]
lambda:匿名函数
fn = lambda a,b(形参) : a+b(相当于return) #一般用来定义很简单的函数,复杂的功能不建议使用,使用场景:配合着sorted,map,fillter使用 ret = fn(3,5) print(ret)
sorted:排序(按照规则进行排序,规则:长度,大小,数量...))
#方法1 lst = [1,2,3,4,5,6,7] a = sorted(lst,reverse=True) #翻转 print(a) ### [7, 6, 5, 4, 3, 2, 1] #方法2 lst = ["胡一菲","张伟","关谷神奇","曾小贤吕小布","诺兰"] #按照字符串长度排序 def func(s): return len(s) #返回长度 #执行流程:把可迭代对象中的每一项拿出来,作为参数传递给后面key函数.函数返回数字,根据数字进行排序 s = sorted(lst,key=func,reverse=True) print(s) ### ['曾小贤吕小布', '关谷神奇', '胡一菲', '张伟', '诺兰'] #方法3 lst = ["胡一菲","张伟","关谷神奇","曾小贤吕小布","诺兰"] #按照字符串长度进行排序 print(sorted(lst,key= lambda s:len(s),reverse=True)) ### ['曾小贤吕小布', '关谷神奇', '胡一菲', '张伟', '诺兰'] #方法4 lst = [{"name":"alex","shenggao":150,"tizhong":250}, {"name":"wusir","shenggao":158,"tizhong":150}, {"name":"taibai","shenggao":177,"tizhong":130}, {"name":"ritian","shenggao":165,"tizhong":130}, {"name":"nvshen","shenggao":160,"tizhong":120}, {"name":"baolang","shenggao":183,"tizhong":190}, ] #按照体重进行排序 print(sorted(lst,key=lambda lst:lst['shenggao'],reverse=True))
filter:过滤
#方法1 lst = ["张无忌","张翠山","范冰冰","金毛狮王","李冰冰"] #过滤掉姓张的人 fn = filter(lambda name : not name.startswith("张"),lst) print(fn) #<filter object at 0x00000000021DC128> , filter处理完之后是在内存地址中 print("__iter__"in dir(fn)) #判断fn是不是可迭代对象 for el in fn: #可迭代对象可以用for循环来拿数据,也可以用"__next__"来拿取数据 print(el,end=" ") ### 范冰冰 金毛狮王 李冰冰 #方法2
lst = [{"name":"alex","shenggao":150,"tizhong":250}, {"name":"wusir","shenggao":158,"tizhong":150}, {"name":"taibai","shenggao":177,"tizhong":130}, {"name":"ritian","shenggao":165,"tizhong":130}, {"name":"nvshen","shenggao":160,"tizhong":120}, {"name":"baolang","shenggao":183,"tizhong":190}, ] #过滤掉体重大于180的人 fn = filter(lambda dic : dic["tizhong"] > 180,lst) for i in fn: print(i)
reversed:翻转
#方法1 lst = ["张无忌","张翠山","范冰冰","金毛狮王","李冰冰"] fn = reversed(lst) print(list(fn)) ### ['李冰冰', '金毛狮王', '范冰冰', '张翠山', '张无忌'] #方法2 huiwen = "上海自来水来自海上" # s = huiwen[::-1] #用步常来切片:上海自来水来自海上 it = reversed(huiwen) s = "" #空字符串拼接 for i in it: s += i print(s) ### 上海自来水来自海上
map:映射函数
语法:map(function, iterable) 可以对可迭代对象中的每一个元素进行映射. 分别取执行
function
计算每个元素的平方,返回新列表
函数版写法: def func(e): return e*e mp = map(func, [1, 2, 3, 4, 5]) print(mp) print(list(mp)) 改写成lambda print(list(map(lambda x: x * x, [1, 2, 3, 4, 5])))
计算两个列表中相同位置的数据的和
lst1 = [1, 2, 3, 4, 5] lst2 = [2, 4, 6, 8, 10] print(list(map(lambda x, y: x+y, lst1, lst2)))
6.字符串相关:format,ord,chr,ascii,repr,r
format:格式化字符串,与具体数据相关,用于计算各种小数, 精算等.
s = "门神" s1 = s.center(20) print(s1) ### 门神 #居中显示 #字符串 s = "门神" print(format("门神","^20")) #居中显示 print(format("门神","<20")) #居左显示 print(format("门神",">20")) #居右显示 #数值 print(format(3, 'b')) # 二二进制 binary 0b11 print(format(65, 'c')) # 转换成unicode字符 ascii print(format(11, 'd')) # 十十进制 print(format(11, 'o')) # 八八进制 0o 13 print(format(11, 'x')) # 十六进制(小写字母) print(format(11, 'X')) # 十六进制(大写字母) print(format(11, 'n')) # 和d一样 print(format(11)) # 和d⼀样 #科学计数 print(format(123456789, 'e')) # 科学计数法. 默认保留6位小数 表示大的数据 print(format(123456789, '.2e')) # 科学计数法. 保留2位小数(小写) print(format(123456789, '0.2E')) # 科学计数法. 保留2位⼩数(大写) #浮点计数法 print(format(1.23456789, 'f')) # 浮点数计数法. 保留6位小数 print(format(1.23456789, '0.2f')) # 小浮点数计数法. 保留2位小数 print(format(1, '0.10f')) # 小浮点数计数法. 保留10位小数 print(format(1.23456789e+10000, 'F')) # 小浮点数计数法.
ord:显示字符串在编码中的位置,chr:显示编码中某个位置的字符串
print(ord("中")) #20013 显示"中"字在编码中的位置 print(chr("20013")) # 中 显示编码"20013"的位置是什么字 #打印编码中所有字符 for i in range(65536): print(chr(i),end=" ")
ascii:判断你给的信息是否是ascii
print(ascii("中")) #'\u4e2d'
repr:还原字符串最官方的效果
r:原封不动的显示字符串