函数--内置函数、匿名函数、
一.内置函数。
作用域相关
globals()——获取全局变量的字典
locals()——获取执行本方法所在命名空间内的局部变量的字典
迭代器相关:
renge() 生成数据
next() 迭代器向下执行一次
iter() 获取迭代器,内部实际使用的是__iter__()方法来获取迭代器
字符串类型相关:
eval() 执⾏字符串类型的代码.有返回值 exec() 执⾏字符串类型的代码,没有返回值 compile() 将字符串类型的代码变异. 代码对象能够通过exec语句来执⾏或者eval()进⾏求 值,很少用
输入输出相关:
input() 获取用户输入的内容 print() 打印输出
内存相关:
hash() 获取到对象的哈希值(int,str,bool,tuple)
id() 获取到对象的内存地址
文件操作相关:
open() 用于打开一个文件,创建一个文件句柄
模拟相关:
__import__() 用于动态加载类和函数
调用相关:
callable() 用于检查一个对象是否是可调用的,如果返回True,object有可能调用失败,但如何返回False,那调用绝对不会成功
查看内置属性:
dir() 查看对象的内置属性,方法,访问的是对象中的__idr__()方法
基础数据类型相关:
数字相关:
bool() 将给定的数据转换成bool值. 如果不给值. 返回False
int() 将给定的数据转换成int值. 如果不给值, 返回0
float() 将给定的数据转换成float值. 也就是⼩数
complex() 创建⼀个复数. 第⼀个参数为实部, 第⼆个参数为虚部. 或者第⼀个参数直接
⽤字符串来描述复数
进制转换:
bin() 将给的参数转换成⼆进制
otc() 将给的参数转换成八进制
hex() 将给的参数转换成⼗六进制
数学运算:
abs() 返回绝对值
divmode() 返回商和余数
round() 四舍五入
pow(a, b) 求a的b次幂, 如果有三个参数. 则求完次幂后对第三个数取余
sum() 求和
min() 求最⼩值
max() 求最⼤值
和数据结构相关:
列表和元组:
list() 将⼀个可迭代对象转换成列表
tuple() 将⼀个可迭代对象转换成元组
reversed() 将⼀个序列翻转, 返回翻转序列的迭代器
slice() 列表的切片
字符串相关:
str() 将数据转化成字符串
format() 与具体数据相关, ⽤于计算各种⼩数, 精算等
bytes() 把字符串转化成bytes类型 bytearray() 返回⼀个新字节数组. 这个数字⾥的元素是可变的, 并且每个元素的值得范围是[0,256) memoryview() 查看bytes在内存中的情况 ord() 输入字符找带字符编码的位置 chr() 输入位置数字找出对应的字符 ascii() 是ascii码中的返回该值 不是就返回\u... repr() 返回⼀个对象的string形式,就是原封不动的输出, 引号和转义字符都不起作⽤ %r 原封不动的写出来 name = 'taibai' print('我叫%r' % name)
数据集合: dict() 创建一个字典 set() 创建一个集合 frozenset() 创建一个冻结的集合,冻结的集合不能进行添加和删除操作 其他相关: len() 返回一个对象中的元素的个数 sorted() 对可迭代对象进行排序操作 enumerate() 获取集合的枚举对象 lst = ["alex","wusir","taibai"] for index,el in enumerate(lst): print(str(index)+"==>"+el) all() 可迭代对象中全部都是True,结果才是True any() 可迭代对象中有一个是True,结果就是True zip() 函数用于将可迭代的对象作为参数,将对象总对应的元素打包成一个个元组,然后返回有这些元组组成的表,如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同. filter() 过滤 map() 会根据提供的函数对指定序列做映射
二.匿名函数.
匿名函数统意的名字是: lambda
lambda 参数: 返回值(条件为真情况下返回此值) ,参数
fn = lambda a,b :a+b #定义一个很简单的函数,复杂的函数不要用lambda ret = fn(3,5) print(ret) print(func) print(fn) #使用场景:配合着sorted,map,filter 一起使用
三、本节部分函数详解。
sorted(iterable, key=None, reverse=False) 排序函数,默认返回新列表,自己定义排序的规则,参数1为可迭代对象,参数2为比较元素,参数3为排序规则(reverse=True为降序 , reverse=False为升序默认)
sort() 是应用在list上的方法,list的sort方法返回的是对已经存在的列表进行操作
lst = [11,5,36,1,27,58] s = sorted(lst) #默认从小到大排序 print(s) lst = ["胡一菲", "张伟", "关谷神奇", "曾小贤吕小布", "诺澜"] #按照字符串长度排序 def func(s): return len(s) #返回长度 执行流程: 把可迭代对象中的每一项拿出来,作为参数传递给后面key函数.函数返回数字,根据数字进行排序 s = sorted(lst,ky = func) print(s) print(sorted(lst,key=lambda s:len(s)))
eval() 此函数可以把字符串类型的数据还原为执行代码,说白了,就是去掉双引号.
注意:eval(),在给数据量很大的还原回原类型时,有可能回出现内存溢出现象,所以,特别是在网络传输时尽量用json格式编写和解除,防止溢出.
用途:可以把读取出来的文件,用此方法还原为字典、列表、元组,方便进行修改,改完后,再用str()强转回字符串,就可以再写进去了,文件修改可以用到
s = "18+2" ret = eval(s) # 执行字符串类型的代码 print(ret)
s = "{'name':'alex', 'age':18, 'isMan':False}" # 字符串
# 把字符串类型的代码还原回字典, 列表, 元组
ret = eval(s) # 侧重的有返回值
print(ret)
print(type(ret))
exec() 执行字符串类型的代码,说白了,就是把注释或者交互模式的内容直接当作程序来运行,这个比较危险,一般不用
code = input("请输入你要执行的代码") exec(code) # 没有返回值. 想要返回值用eval print(code) # pycharm报错不一定准
compile 函数编译,把你要执行的代码先预编译.通过exec和eval可以执行我们的代码
code = '''
for i in range(10):
if i % 2 == 0:
print(i)
'''
c = compile(code, "", "exec") # 预加载代码
# exec
exec(c) # 运行代码
# 可以使用complie写一个编程大赛.
map() 映射函数,返回一个新列表
lst = ["篮球", "打打台球", "唱歌", "爬慌山", "步"] m = map(lambda s: "爱好:"+s , lst) print(list(m)) lst = [1,5,78,12,16] # 计算每个数字的平方 print([i **2 for i in lst]) m = map(lambda i: i ** 2, lst) print(list(m))
filter 过滤
lst = ["张无忌", "张翠山", "范冰冰", "金毛狮王", "李冰冰"] 过滤掉姓张的人 把可迭代对象打开. 把内部元素一个一个的传递给前面的函数. 由这个函数决定此项是否保留 f = filter(lambda name : not name.startswith("张"), lst) print("__iter__" in dir(f)) # 可迭代对象 for el in f: print(el)
#filter(function,object) #如果obj是个字典,则迭代这个字典,每次输出一个字典得key给function函数调用,
filter得返回值是个可迭代的内存地址,用list()或者for才可查看.