生成器与常见内置函数
一、生成器
生成器?:python,生成器与迭代器看成一种。生成器的本质就是迭代器。
唯一的区别:生成器是我们自己用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'}
四、内置函数
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
any:——可迭代对象中,有一个True就是True
本文来自博客园,作者:Mr-Yang`,转载请注明原文链接:https://www.cnblogs.com/XiaoYang-sir/p/14675601.html