一、yield表达式:通过调用生成器的send功能,向yield传值,yield把所得值再赋值给其他变量名的形式称为yield表达式。
def fff(): print('开始收集') l = [] b = 0 while 1: a = yield '第{}次收集完成'.format(b) b += 1 l.append(a) print('已收集:{}'.format(l)) fff_generator = fff() # 生成 fff() 的执行结果即生产了生成器 fff_generator,而且是没有结束条件的无限生成器 next(fff_generator) # 初次执行走到函数的第一个 yield 挂起 print(fff_generator.send('第一件物品')) # 第一次 send给 yield 的值再赋值给 x print(fff_generator.send('第二件物品')) # 第二次 send给 yield 的值再赋值给 x print(fff_generator.send('第三件物品')) # 第三次 send给 yield 的值再赋值给 x fff_generator.close() # 因为无限生成器不会取完值,所以可以手动关闭此生成器 print(fff_generator.send('第四件物品')) # 对已关闭的生成器再 send 会抛出 StopIteration 的信号
二、三元表达式:用同一行代码实现通过条件判断返回不同的值。格式为:条件成立返回的值 if 条件 else 条件不成立返回的值。
cmd = input('输入条件:') if cmd == '1': print('a') else: print('b') # 以下条件判断可以精简为一行代码实现同样功能 print('a' if cmd == '1' else 'b')