生成器(自定义的迭代器)
# 生成器就是自定义的迭代器
def index():
print('first')
yield 123,234,345
print('second')
yield 'aaaa'
print('third')
yield 'xxxx'
# 函数里面有yield关键字之后,函数调用之前还是函数,一旦调用函数变成了生成器
res=index() # 一旦是生成器,就可以__next__取值了
print(res.__next__())
# 函数中的yield关键字的玩法:__next__一下,走一个yield,光标就停在了yield
# 如果在__next__,会从上一次停留的yield位置继续往下走
print(res.__next__()) # StopIteration
print(res.__next__()) # StopIteration
# l = [1, 2, 3,]
# a= l.__iter__()
# while True:
# print(a.__next__())
生成器实现range功能
# range功能:
1.玩法一:
range(10) # 0-9的数字
2. 玩法二:
range(3,10) # 3-9的数字
3. 玩法三:
range(1, 10, 2) # 1,3,5,7,9
# 玩法2:
def my_range(start, end=None, step=1):
# start => 2
# end => 10
if not end:
end = start
start = 0
while start < end:
yield start
start += step
#
# res = my_range(2, 10, 2)
res = my_range(10)
for i in res:
print(i)
yield传值(了解)
def index(name):
print('%s 准备干饭' % name)
while True:
food = yield
print('%s 开干 %s' % (name, food))
res=index('ly')
res.__next__()
# res.__next__()
res.send('苹果')
res.send('橘子')
yield和return的对比
yield:
1. 函数内遇到yield关键字把函数变成了生成器
2. yield 也可以返回值,并且支持返回多个(元组形式)
3. 遇到yield,函数不会结束,而是"停住"
4. yield 也支持传值
return
1. 后面可以跟返回值,也支持返回多个(元组形式)
2. 函数遇到return,会立马结束
生成器表达式
# 1. 生成器的笔试题
# 求和
def add(n, i):
return n + i
# 调用之前是函数 调用之后是生成器
def test():
for i in range(4):
yield i
g = test() # 初始化生成器对象
for n in [1, 10]:
g = (add(n, i) for i in g)
'''
第一次循环:
g = (add(1, i) for i in g)
第二次循环:
g = (add(10, i) for i in (add(10, i) for i in g))
'''
res = list(g)
print(res)
# 值是20,21,22,23
常见内置函数
# print(abs(123))
# print(abs(-123)) # 求绝对值
# l = [1, 2, 3, 4,5,6,7]
# print(all(l))
# print(any(l))
# print(sum(l)) # 求和
# print(divmod(100,10))
# print(divmod(101,10))
# print(divmod(99,10))
'''
100条数据,10条 10
101条数据,10条 11
99条数据 10条 10
'''
# num,mod = divmod(100, 10)
# if not mod:
# page = num+1
string = """
# hahahahh
print('hello world')
"""
# eval(string)
# exec(string)
# a = 123
# s = 'aaaa'
# print(type(a) is int)
# print(type(s) is str)
# print(isinstance(s, int)) # 判断某个数据是不是某个实例
# print(chr(68))
# print(ord('A'))
# print(pow(2,3)) # 2
# print(pow(3,3)) # 2
# print(round(4.3))
# print(round(4.5))
# print(round(4.8))
# bytes()
s = 'aaa'
print(s.encode('utf8'))
res=bytes(s, 'utf8')
print(res)
print(res.decode('utf8'))
print(str(res,'utf8'))