内置函数 匿名函数 eval "exec execute" compile sorted map filter等常见函数 repr chr ord
内置函数
什么是内置函数? 就是python给你提供的. 拿来直接用的函数, 比如print., input等等. 截⽌止 到python版本3.6.2 python⼀共提供了了68个内置函数. 他们就是python直接提供给我们的. 有 ⼀些我们已经⽤用过了了. 有一些还没有⽤用过. 还有⼀些需要学完了了⾯向对象才能继续学习的. 今 天我们就认识一下python的内置函数
作用域相关: locals() 返回当前作⽤用域中的名
globals() 返回全局作⽤用域中的名
迭代器相关:
range() 生成数据
next() 迭代器向下执行⼀次, 内部实际使用了__next__()方法返回迭代器的下⼀个项⽬
iter() 获取迭代器, 内部实际使⽤用的是__iter__()⽅方法来获取迭代器
输入和输出相关:
input() 获取⽤用户输入的内容
print() 打印输出
内存相关:
hash() 获取到对象的哈希值(int, str, bool, tuple)
id() 获取到对象的内存地址
数字算出来就是数字本身. 其他的数据算完一坨很长的数字 print(hash("123456789")) # hash算法. 最后算出来的一定是一个数字 print(id("呵呵")) is 比较内存地址 == 比较的是值
⽂件操作相关:
open() 用于⼝打开⼀个文件, 创建⼀个文件句柄
模块相关:
__import__() 用于动态加载类和函数
re = __import__(input("请输入你要导入的模块名:")) re.search()
帮助:
help() 函数⽤用于查看函数或模块⽤用途的详细说明
print(help(str)) # 查看帮助....高级框架
调⽤相关:
callable() ⽤用于检查⼀个对象是否是可调⽤用的. 如果返回True, object有可能调⽤用失败, 但 如果返回False. 那调用绝对不会成功
查看内置属性:
dir() 查看对象的内置属性, 方法. 访问的是对象中的__dir__()⽅法
基础数据类型相关:
数字相关:
bool() 将给定的数据转换成bool值. 如果不给值. 返回False
int() 将给定的数据转换成int值. 如果不给值, 返回0
float() 将给定的数据转换成float值. 也就是小数
complex() 创建⼀个复数. 第⼀个参数为实部, 第⼆个参数为虚部. 或者第⼀个参数直接 ⽤字符串来描述复数
进制转换:
bin() 将给的参数转换成二进制
otc() 将给的参数转换成八进制
hex() 将给的参数转换成十六进制
数学运算:
abs() 返回绝对
divmode() 返回商和余数 ##print(divmod(20, 3)) ##(6, 2)
round() 四舍五入 整数是奇数 -> 正常四舍五入 偶数 -> 五舍六入
pow(a, b) 求a的b次幂, 如果有三个参数. 则求完次幂后对第三个数取余
sum() 求和
min() 求最小值
max() 求最大值
和数据结构相关:
列表和元组:
list() 将⼀个可迭代对象转换成列列表
tuple() 将⼀个可迭代对象转换成元组
reversed() 将⼀个序列翻转, 返回翻转序列列的迭代器
slice() 列表的切片
huiwen = "上海自来水来自海上" #这里判断回文
s = huiwen[::-1]
it = reversed(huiwen) # 返回的是迭代器reversed 返回的是迭代器 s = "" for el in it: s += el print(s)
lst = ["河南话", "四川话", "东北", "山东", "上海"]
# s = slice(3,5) # 切片. 麻烦 #用的是slice切片,同理lst[3,5]
# print(lst[s]) #这里切片太麻烦所以基本不用slice
# 家,
# 记这个 ####拿到一个列表中的索引和所对应的元素 for i in range(len(lst)): print(i, lst[i]) for i, el in enumerate(lst, 1): print(i, el)
字符串串相关:
str() 将数据转化成字符串串
format() 与具体数据相关, ⽤用于计算各种小数, 精算等 #####这里是重点,主要是数值和浮点数居多
bytes() 把字符串串转化成bytes类型
bytearray() 返回⼀一个新字节数组. 这个数字⾥里里的元素是可变的, 并且每个元素的值 得范 围是[0,256)
memoryview() 查看bytes在内存中的情况
ord() 输入字符找带字符编码的位置
chr() 输入位置数字找出对应的字符
ascii() 是ascii码中的返回该值 不是就返回\u...
repr() ###########返回⼀个对象的string形式
转义字符 \n 换行 \t tab 制表符 \r 回车 \" 双引号 \' 单引号 \\ \ print('你好, 我叫周杰伦.我来自\\n台湾. 我老婆叫昆凌') repr() # 还原字符串最官方的效果 这里的字符串能够被所有语言显示,用其他语言能原封不动的显示字符串的内容 str:python的字符串 repr: 所有的字符串 print(repr("你好. \\n我叫\周杰伦")) # python -> repr() -> cpython c里面. 报错 print(r"\n\t范德萨发生\r\b\ffdsaf") # 原封不动的显示字符串
数据集合:
dict() 创建⼀个字典
set() 创建⼀个集合
frozenset() 创建⼀个冻结的集合. 冻结的集合不能进⾏添加和删除操作
其他相关:
len() 返回⼀个对象中的元素的个数
sorted() 对可迭代对象进⾏行行排序操作(讲完lamda后再讲这个)
enumerate() 获取集合的枚举对象
all() 可迭代对象中全部是True, 结果才是True 类似于and
any() 可迭代对象中有⼀个是True, 结果就是True 类似于or
zip() 函数⽤于将可迭代的对象作为参数, 将对象中对应的元素打包成⼀个元组, 然后返回由这些元组组成的开了了表. 如果各个迭代器的元素个数不一致, 则返回列列表⻓度与 最短 的对象相同.
# ###zip 拉链函数 lst1 = ["赵四", "刘能", "香秀"] lst2 = ["刘晓光", "王小利"] # 水桶效应 lst3 = ["街舞", "磕巴", "哭"] z = zip(lst1, lst2, lst3) print("__iter__" in dir(z)) # 判断是否是可迭代对象 for el in z: print(el) # True # ('赵四', '刘晓光', '街舞') # ('刘能', '王小利', '磕巴')
匿名函数
# 匿名函数统一的名字是:<lambda> fn = lambda a, b : a + b # 定义一个很简单的函数. 复杂的函数不要用lambda ret = fn(3, 5) print(ret) print(func) print(fn) 使用场景: 配合着sorted, map, filter 一起使用
sorted 排序函数. 让你自己去定义排序的规则
filter() 过滤(讲完lamda)
map() 会根据提供的函数对指定序列列做映射(lamda)
lst = [11,5,36,1,27,58] s = sorted(lst) # 默认从小到大排序. ### sorted默认值是将数值从小到大排序 print(s)
lst = ["胡一菲", "张伟", "关谷神奇", "曾小贤吕小布", "诺澜"] # 按照字符串长度排序 def func(s): return len(s) # 返回长度
# # 执行流程:
# # 把可迭代对象中的每一项拿出来, 作为参数传递给后面key函数.
# # 函数返回数字. 根据数字进行排序
s = sorted(lst, key=func)
print(s)
print(sorted(lst, key=lambda s:len(s) ))
##### sorted排序
['张伟', '诺澜', '胡一菲', '关谷神奇', '曾小贤吕小布']
['张伟', '诺澜', '胡一菲', '关谷神奇', '曾小贤吕小布']
####
lst = [ {"name":"alex", "shengao":150, "tizhong":250}, {"name":"wusir", "shengao":158, "tizhong":150}, {"name":"taibai", "shengao":177, "tizhong":130}, {"name":"ritian", "shengao":165, "tizhong":130}, {"name":"nvshen", "shengao":160, "tizhong":120}, {"name":"baolang", "shengao":183, "tizhong":190} ] # 按照体重进行排序 sorted排序
print(sorted(lst, key=lambda dic:dic['tizhong'], reverse=True))
# filter 过滤 lst = ["张无忌", "张翠山", "范冰冰", "金毛狮王", "李冰冰"] # 过滤掉姓张的人 # 把可迭代对象打开. 把内部元素一个一个的传递给前面的函数. 由这个函数决定此项是否保留 f = filter(lambda name : not name.startswith("张"), lst) print("__iter__" in dir(f)) # 可迭代对象 for el in f: print(el)
lst = [ {"name":"alex", "shengao":150, "tizhong":250}, {"name":"wusir", "shengao":158, "tizhong":150}, {"name":"taibai", "shengao":177, "tizhong":130}, {"name":"ritian", "shengao":165, "tizhong":130}, {"name":"nvshen", "shengao":160, "tizhong":120}, {"name":"baolang", "shengao":183, "tizhong":190} ] # 过滤掉体重大于180的人 想要的是 小于180 filter 过滤
f = filter(lambda d : d['tizhong'] <= 180, lst) print(list(f))
map() 映射函数 lst = ["篮球球", "打打台球", "唱歌", "爬慌山", "步"] m = map(lambda s: "爱好:"+s , lst) print(list(m))
#['爱好:篮球球', '爱好:打打台球', '爱好:唱歌', '爱好:爬慌山', '爱好:步']#
lst = [1,5,78,12,16] # 计算每个数字的平方 map() 映射函数
print([i **2 for i in lst]) ##[1, 25, 6084, 144, 256]
m = map(lambda i: i ** 2, lst)
print(list(m)) ##[1, 25, 6084, 144, 256]
参考资料:内置函数分类图
https://www.processon.com/view/link/5b4ee15be4b0edb750de96ac
eval 是把字符串类型的数据作为代码进行执行
eval 是把字符串类型的数据作为代码进行执行 s = "18+2" ret = eval(s) # 执行字符串类型的代码 print(ret)
code = input("请输入你要执行的代码:") ret = eval(code) print(ret)
s = "{'name':'alex', 'age':18, 'isMan':False}" # 字符串 # 把字符串类型的代码还原回字典, 列表, 元组 ret = eval(s) # 侧重的有返回值 print(ret) print(type(ret))
exec execute 执行字符串类型的代码, 不能太长. 不能太乱
exec execute 执行字符串类型的代码, 不能太长. 不能太乱 code = input("请输入你要执行的代码") exec(code) # 没有返回值. 想要返回值用eval print(a) # pycharm报错不一定准 compile 编译: 把你要执行的代码先预编译. 通过exec和eval可以执行我们的代码 code = ''' for i in range(10): if i % 2 == 0: print(i) '''
compile(code, "", "exec") # 预加载代码
c = compile(code, "", "exec") # 预加载代码 # exec exec(c) # 运行代码 可以使用complie写一个编程大赛.