三元表达式: 变量 = 值1 if 条件为真 else 值2 类似于: res = ‘对了‘ if 1 > 2 else ‘错了‘ print(res) >>> ‘错了‘ 普通表示: if 1 > 2: print(‘对了‘) else: print(‘错了‘) 列表解析: 假如要生成0-9共10个数字,存放在列表中 类似于: l = [i for i in range(10)] print(l) >>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 普通表示: l = [] for i in range(10): l.append(i) print(l) 列表解析与三元表达式共同使用: 假如要生成0-9共10个数字中大于5的数字,存放在列表中 l = [i for i in range(10) if i>5] >>> [6, 7, 8, 9] 生成器: 为一种数据类型,该数据类型自动实现了迭代器协议(其他数据类型如字典、列表等,需要先执行__iter__()方法)所以生成器就是可迭代对象 生成器分类及在python中的表现形式: 1、生成器函数:同常规函数一样定义,但是使用yield语句(可以执行多次)而不是return语句返回结果。yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次从它离开的地方继续执行; def test(): for i in range(1,4): yield i a = test() print(a.__next__()) >>> 1 print(a.__next__()) >>> 2 print(a.__next__()) >>> 3 2、生成器表达式:类似于列表推导,但是生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表 类似于猎豹列表解析,只是将[]改为() l = (i for i in range(1,4)) print(l.__next__()) >>> 1 print(l.__next__()) >>> 2 print(l.__next__()) >>> 3 所以生成器表达式配合for以及内置函数方便的使用一些功能 如求0~100的和 sum(i for i in range(101)) 生成器的优点: 1、生成器的好处是延迟计算(按需产生结果),一次返回一个结果。也就是说,它不会一次生成所有的结果,这对于大数据量处理将会非常有用; 2、生成器还能提高代码的可读性。 注意事项:生成器只能遍历一次(遍历完成,函数失效),超出次数会抛出StopIteration异常 例子:有一个 人口普查.txt{‘city‘:‘A‘,‘people‘:1000}{‘city‘:‘B‘,‘people‘:10100}{‘city‘:‘C‘,‘people‘:12000}{‘city‘:‘D‘,‘people‘:10300}{‘city‘:‘E‘,‘people‘:102300}想要获取这五个城市的人口总和 def get_people(filename): with open(filename,‘r‘,encoding=‘utf-8-sig‘) as f: for i in f: yield eval(i)[‘people‘] data_people = get_people(‘人口普查.txt‘)all_people = sum(data_people)print(all_people) 求一段文字中,每个单词出现的位置普通方法def index_words(text): result = [] if text: result.append(0) for index,letter in enumerate(text,1): if letter == ‘ ‘: result.append(index) return resultprint(index_words(‘helllo alex da sb‘)) 使用生成器def index_words(text): try: if text: yield 0 for index,letter in enumerate(text,1): if letter == ‘ ‘: yield index except StopIteration: #捕获生成器没值异常 print(‘没了~~~‘)g = index_words(‘helllo alex da sb‘)print(g.__next__())print(g.__next__())print(g.__next__())print(g.__next__())
原文地址:https://www.cnblogs.com/Meanwey/p/9741268.html
时间: 2024-10-12 07:59:06