生成器与常见内置函数
一、生成器对象
如果函数体代码里含有yield关键字,在调用函数,函数体代码不会执行,而是将函数变成了生成器,得到的值就称为生成器对象。
def index():
print('hello')
yield 123
res = index()
print(res.__next__())

二、自定义range功能
利用yield可以实现自定义迭代器,我们可以尝试实现一下基本的range的功能
def my_range(start, stop=None, step=1):
if not stop:
stop = start
start = 0
while start < stop:
yield start
start += step
res = my_range(10)
for i in res:
print(i)

三、yield传值
def my_func(name):
print('%s' % name)
res = yield
print('%s正在%s' % (name, res))
yield
res1 = my_func('mike')
res1.__next__()
res1.send('哈哈')

四、yield与return对比
yield
1.yield可以返回值(支持多个并组织成元组)
2.遇到yield函数体代码不会结束而是会阻塞
3.yield还可以是传值的一种方式
return
1.return可以返回值(支持多个并组织成元组)
2.遇到return函数体代码直接结束
五、生成器表达式
l = [1, 2, 3, 4, 5]
res = (i+1 for i in l)
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())
生成器内部的代码只有在迭代取值的时候才会执行
迭代器对象,生成器对象都是为了节省空间,类似于一个工厂,在我们需要的时候可以随时加工出“数据”

六、常见内置函数
# 1.abs() 求绝对值
print(abs(-1)) # 1
print(abs(1)) # 1
# 2.all() any()
l = [1,2,'hello',None]
print(all(l)) # 所有元素的的布尔值为True则结果为True
print(any(l)) # 所有元素的布尔值为有一个为True则结果为True
# 3.bin() oct() hex()
print(bin(10)) # 0b1010 将括号内的数字转换为二进制数
print(oct(10)) # 0o12 将括号内的数字转换为八进制
print(hex(10)) # 0xa 将括号捏的数字转换为十六进制
# 4.bytes() str()
print(bytes('哈哈哈', 'utf8')) #将元素转为二进制
print(str(b'\xe5\x93\x88\xe5\x93\x88\xe5\x93\x88', 'utf8')) #将元素转为字符串
# 5.callable()
def index():
pass
print(callable(index)) # 判断对象是否可调用,可以返回True 反之返回False
# 6.chr() ord()
print(ord('h')) # 104 根据字符串寻找对应的ASCII码
print(chr(100)) # d 根据ASCII码寻找对应的字符
# 7.complex()
print(complex(10)) # 复数 (10+0j)
# 8.dir()
def index():
pass
print(dir(index)) # 查看当前对象可以调用的名字
# 9.divmod()
print(divmod(101, 10)) # (10, 1) 返回前面的值除于后面的值得到的数和余数
# 10.eval() exec()
# eval()只能识别简单的语法 exec()可以识别复杂语法 都是将字符串中的数据内容加载并执行
# 11.isinstance()
print(isinstance(1, int)) # True
print(isinstance(1, float)) # False 判断第一个值是不是属于第二个的数据类型
# 12.pow()
print(pow(3, 3)) # 27 括号中第一个参数的使用第二个参数来当幂
# 13.round()
print(round(4.4)) # 4
print(round(4.5)) # 4
print(round(4.6)) # 5 括号内的参数五舍六入
# 14.sum()
l = [1, 2, 3, 5]
print(sum(l)) # 11 求传入列表中的元素的和


浙公网安备 33010602011771号