生成器?:python,生成器与迭代器看成一种。生成器的本质就是迭代器。
获取生成器的三种方式:
1、生成器函数
2、生成器表达式
3、python内部提供的一些。
生成器函数。
yield:
只要函数中有yield那么它就是生成器函数。
生成器函数中可以存在多个yield,yield不会结束生成器函数,一个yield对应一个next
正常情况下:
def func(): print('111') print('222') return 3333 ret = func() print(ret) # 输出 111 222 3333
生成器函数:
def func(): print('111') print('222') yield 3333 yield 4444 yield 5555 ret = func() print(next(ret)) # 一个yield对应一个next print(next(ret)) # 输出 111 222 3333 4444
yield return
return:函数只存在一个return结束函数,并且给函数的执行者返回值。
yield:只要函数中有yield那么它就是生成器而不是函数了。
生成器函数中可以存在多个yield,yield不会结束生成器函数,一个yield对应一个next
yield from
将列表变成了迭代器返回。
def func(): ll = [1, 2, 3, 4, 5, 6] yield from ll ret = func() print(next(ret)) print(next(ret)) print(next(ret)) # 输出: 1 2 3
二、列表推导式
用一行代码构建一个比较复杂有规律的列表。
循环模式:[变量(加工后的变量) for 变量 in iterable]
ll = [i for i in range(100)] print(ll) # 输出 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9......99]
多层循环:留下name里面有两个e的名字。
names = [['Tom', 'Villy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'], ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']] ll = [n.upper() for i in names for n in i if n.count('e') >= 2 ] print(ll) # 输出 ['JEFFERSON', 'WESLEY', 'STEVEN', 'JENNIFER']
筛选模式:[变量(加工后的变量) for 变量 in iterable if 条件]
ll = [i for i in range(100) if i % 2 == 0 ] print(ll) # 输出 [0, 2, 4, 6, 8, 10, 12, 14, 16......98]
三、生成器表达式
与列表推导式的写法一模一样,也有筛选模式,循环模式,多层循环结构。
就是把列表推导式的 [ ] 括号换成()
ll = (i for i in range(100) if i % 2 == 0 ) print(next(ll)) print(next(ll)) print(next(ll)) # 输出 0 2 4
字典推导式。(方便)
l1 = ['jay', 'jj', 'meet'] l2 = ['周杰伦', '凌俊杰', '小宝'] dic = {l2[i]:l1[i] for i in range(3)} print(dic) # 输出 {'周杰伦': 'jay', '凌俊杰': 'jj', '小宝': 'meet'}
四、内置函数(1)
python提供了68个内置函数。
大部分了解即可。
eval:——剥去字符串的外衣运算里面的代码,有返回值。(危险别用,特别是有网络)
exec:——与eval几乎一样,代码流
hash:——获取一个对象的哈希值(和哈希算法)
help:——获取函数或模块的使用说明。
callable:——检查一个对象是否可调用。
int:——将一个字符串或数字转换成整型。取整
float:——函数用于将整数和字符串转换成浮点数。
complex:——复数
bin:——将十进制转化成二进制
cot:——十进制转化成八进制
hex:——将十进制转化成十六进制
divmod:——除数与被除数的结果(商几余几)
round:——保留浮点数的小数的位数
pow:——求x的y次幂(x**y)
bytes:——用于不同的编码转换
ord:——输入字符找该字符编码的位置(是Ascii就找ASCII不是就找Uicode)
chr:——输入位置数字找出其对应的字符 (UIcode)
repr:——返回一个对象的string形式(原形毕露)
all:——可迭代对象中,全都是True才是True