一. 三元表达式 求2个数的最大值 • 普通方法 x=2 y=3 if x > y: print(x) else: print(y) • 三元表达式 x = 2 y = 3 max = x if x > y else y 二. 可迭代对象与迭代器对象 1. 可迭代对象 • 定义:内置有__iter__方法的都叫可迭代对象 • 属于可迭代对象的数据类型:str, list, tuple, dict, set, file name = 'byx'.__iter__ lis = [1, 2].__iter__ tup = (1, 2).__iter__ dic = {'name': 'nick'}.__iter__ s1 = {'a', 'b'}.__iter__ f = open('49w.txt', 'w', encoding='utf-8') f.__iter__ f.close() 2. 迭代器对象 • 定义:可迭代的对象执行__iter__方法得到的返回值。 • 特点: 1. 内置__next__方法,执行该方法会拿到迭代器对象中的一个值。 2. 内置__iter__方法,执行该方法拿到迭代器本身。 3. 文件本身就是迭代器对象。 • 缺点: 1. 取值麻烦,只能一个个取,并且只能往后取,值取了就没了。 2. 无法使用 len() 方法获取长度。 dic = {'a': 1, 'b': 2, 'c': 3} iter_dic = dic.__iter__() print(iter_dic.__next__()) print(iter_dic.__next__()) print(iter_dic.__next__()) 结果: a b C 3. for 循环原理 • for循环又称为迭代器循环,in后必须是可迭代的对象 • 因为迭代器使用__iter__后还是迭代器本身,因此for循环不用考虑in后的对象是可迭代对象还是迭代器对象。 lis = [1, 2, 3] for i in lis: print(i) 结果: 1 2 3 三. 生成器 1. 生成器函数 • 定义:常规函数定义, 但使用yield语句而不是return语句返回结果。yield语句一次返回一个结果,再每个结果中间,挂起函数的状态,以便下次从它离开的地方继续执行。 • 优点:不会一下在内存中生成太多数据 def produce(): """生产衣服""" for i in range(2000000): yield "生产了第%s件衣服"%i product_g = produce() print(product_g.__next__()) #要一件衣服 print(product_g.__next__()) #再要一件衣服 print(product_g.__next__()) #再要一件衣服 num = 0 for i in product_g: #要一批衣服,比如5件 print(i) num +=1 if num == 5: break 2. 生成器表达式 gen = (i for i in range(10)) print(gen) 结果: <generator object <genexpr> at 0x106768f10> 四. 列表推导式和字典推导式 1. 列表推导式 print([i for i in range(10)]) 结果 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 2. 字典生成式 • 一般生成 print({i: i**2 for i in range(5)}) 结果: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25} • zip方法生成 keys = ['name', 'age', 'gender'] values = ['byx', 19, 'male'] res = zip(keys, values) print({zip(keys,values)}) info_dict = {k: v for k, v in res} print({info_dict}) 结果: <zip object at 0x11074c088> {'name': 'byx', 'age': 19, 'sex': 'male'}