迭代取值跟索引取值的对比
# 迭代取值提供了一种不依赖于索引取值的方式 s = 'hello' 迭代取值: 1. 不依赖于索引取值,__next__()取值 2. 不能重复取值,只能从左往右一个一个取值 索引取值: 1. 必须要是一个容器类型 2. 可以重复取值
生成器(自定义的迭代器)
# 生成器就是自定义的迭代器 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)
常见的内置函数
# 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'))