表达式赋值没返回值还是为none

#!/usr/bin/python 
print("Hello, World!");
def h():
        print ("hello")
        m = yield 5
        print ("m:", m)
        d = yield 12
        print ("d:",d )
        print ("world")
c = h()
c.__next__()  # hello  # 5
c.__next__()  # m: None  # 12
c.__next__()

如上面提到的,调用next方法时,

  1. =(yield 5)

​右边返回 5,却没有赋值给 m,是因为,在python中不支持表达式赋值吗?还是返回none

阅读 2.6k
1 个回答

如下为生成器的 next() 函数的描述

开始生成器函数的执行或者在最后一次执行的yield表达式处恢复执行。当生成器函数使用next()方法恢复执行时,当前的yield表达式始终None。然后执行继续行进到下一个yield表达式,在那里生成器被再次挂起并返回expression_list的值给next()的调用者。

即你在第一次 yield 5 后,,这个时候 m= 这个赋值操作根本没有执行,然后,第二次使用 next 时, 当前的 yield 表达式为 None,即 m=None

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进