生成器,推导式以及内置函数一
程序员文章站
2022-06-17 08:50:37
生成器,推导式以及内置函数一 1.生成器 迭代器:python中内置的一种节省空间的工具. 生成器的本质就是一个迭代器. 迭代器和生成器的区别:一个是python自带的,一个是程序员自己写的. 2.推导式 3.内置函数一 ......
生成器,推导式以及内置函数一
1.生成器
迭代器:python中内置的一种节省空间的工具.
生成器的本质就是一个迭代器.
迭代器和生成器的区别:一个是python自带的,一个是程序员自己写的.
#在函数中将return改写为yield就是一个生成器 #yield 会记录执行位置 #return 和 yield 都是返回 #return 可以写多个,但是只执行一次,yield可以写多个,还可以返回多次 #一个__next__()对应一个 yield #生成器可以使用for循环获取值 #yield from --将可迭代对象逐个返回 #在函数的内部yield能将for循环和while循环进行临时暂停 #定义一个生成器:1.基于函数 # 2.函数体中存在yield就是一个生成器 # 3.函数名() 就是产生一个生成器 写一个生成器: def func(): print(123) yield "你好" func() # 产生一个生成器 def func(): if 3 > 2: yield "你好" # 停,并进行记录 if 4 > 2: yield "你好" yield "大家好" g = func() # 产生一个生成器 print(g.__next__()) # for i in g: print(g.__next__()) # print(i) print(g.__next__()) def foo(): for i in range(10): pass yield i count = 1 while true: yield count count += 1 g = foo() print(next(g)) # 推荐使用 next() print(next(g)) print(next(g)) # for i in g: print(next(g)) # print(i) 坑 --会生成新的生成器 print(foo().__next__()) print(foo().__next__()) # send() def func(): a = yield "send" print(a) g = func() print(g.send(none)) # 打印出 send print(g.send(123)) # 报错 # 生成器的应用场景: def func(): lst = [] for i in range(10): lst.append(i) return lst print(func()) #[0,1,2,3,4,5,6,7,8,9] def func(): for i in range(10): yield i g = func() for i in range(5): print(next(g)) def func(): lst = ["你","我","他","它"] for i in lst: yield i g = func() print(next(g)) # 你 print(next(g)) # 我 print(next(g)) # 他 print(next(g)) # 它 def func(): lst1 = ["你","我","它"] lst2 = ["他","她","昵"] yield from lst1 # yield 将可迭代对象逐个返回 yield from lst2 g = func() print(next(g)) # 你 print(next(g)) # 我 print(next(g)) # 它
2.推导式
list推导式: [变量(加工后的变量) for循环] [变量(加工后的变量) for循环 加工条件] 生成器表达式: (变量(加工后的变量) for循环) (变量(加工后的变量) for循环 加工条件) 字典推导式: {键:值 for循环 加工条件} 集合推导式: {变量(加工后的变量) for循环 加工条件} list推导式 print([i for i in range(20)]) 循环模式 print([i+1 for in range(10)]) [变量 for i in range(20)] 筛选模式 lst = [] for i in range(20): if i % 2 == 0: lst.append(i) print(lst) print([i for i in range(20) if i % 2 == 0]) [变量(加工后的变量) for循环 加工方式] 生成器表达式: 循环模式: g = (i for i in range(20)) print(next(g)) print(next(g)) print(next(g)) print(list(i for i in range(20))) 筛选模式 g = (i for i in range(50) if i % 2 == 0 ) for i in g: print(i) 字典推导式: print({i:i+1 for i in range(10)}) {键:值 for循环 加工条件} 集合推导式: print({i for i in range(10)}) print({i for i in range(10) if i % 2 == 0})
3.内置函数一
# eval() 执行字符串类型的代码,并返回最终结果 s = "2+2" print(eval(s)) #4 # exec() 执行字符串类型的代码 s = ''' for i in [1,2,3] print(i) ''' print(exec(s)) # 1 2 3 #工作中禁止使用 #hash() 获取一个对象(可哈希对象)的哈希值 print(hash(1)) #help() 用于查看函数或模块用途的详细说明 print(help(list)) #callable() 函数用于检查一个对象是否是可调用的,true仍可能调用失败 # false也不一定绝对成功 name = "alex" def func(): pass print(callable(name)) # false print(callable(func)) # true #int() 将一个字符串或数字转换成整型 print(int('12')) # 12 #float() 用于将整数和字符串转换成浮点数 print(float(2)) # 2.0 #complex() 用于转换一个字符串或数为复数 print(complex(1,2)) # (1+2j) #bin() 将十进制转换成二进制字符串并返回 print(bin(10)) # 0b1010 #oct() 将十进制转换成八进制字符串并返回 print(oct(10)) # 0o12 #hex() 将十进制转换成十六进制字符串并返回 print(hex(10)) # 0xa #divmod() 获取商和余 print(divmod(7,2)) # (3,1) #round() 保留浮点数的小数位数,默认保留整数 print(round(7/3,2)) #2.33 #pow() 求幂 print(pow(2,3)) # 两个参数为2**3次幂 print(pow(2,3,3)) # 三个参数为2**3次幂,对3取余。 #bytes() 用于不同编码之间的转化 s = '你好' bs = s.encode('utf-8') print(bs) #ord() 输入字符找当前字符编码的位置 print(ord('a')) # 97 #chr() 输入当前编码的位置数字找出其对应的字符 print(chr(20013)) # 中 #repr() 返回一个对象的string形式(原形) s = "c:\u3000" print(repr(s)) # 'c:\u3000' #all() 可迭代对象中,全都是true才是true print(all([1,2,true,0])) #false #any() 可迭代对象中,有一个true就是true print(any([1,'',0])) # true #global() 查看全局空间中的变量 #locals() 查看当前空间的变量 name = 1 def func(): a = 123 print(locals()) # {'a':123} print(globals()) #全局空间中的变量 func()