如何解决生成器函数是否可以返回其他类型而不是生成器?
我想知道 python 如何检查生成器函数的返回类型。
我开发了一个从列表中产生的函数,然后当列表为空时它只返回 None
示例:
def my_function(i):
if i == 1:
return
else:
yield from [1,2,3]
我进行了测试,即使参数 i
设置为 1
,返回也将始终是一个生成器,即使未评估产量。
这是我预期的行为,但我认为它可以返回 None 类型,现在我想了解原因。
In [1]: import dis
In [2]: import inspect
In [3]: def my_function(i):
...: if i == 1:
...: return
...: else:
...: yield from [1,3]
...:
In [4]: dis.dis(my_function)
2 0 LOAD_FAST 0 (i)
2 LOAD_CONST 1 (1)
4 COMPARE_OP 2 (==)
6 POP_JUMP_IF_FALSE 12
3 8 LOAD_CONST 0 (None)
10 RETURN_VALUE
5 >> 12 LOAD_CONST 1 (1)
14 LOAD_CONST 2 (2)
16 LOAD_CONST 3 (3)
18 BUILD_LIST 3
20 GET_YIELD_FROM_ITER
22 LOAD_CONST 0 (None)
24 YIELD_FROM
26 POP_TOP
28 LOAD_CONST 0 (None)
30 RETURN_VALUE
In [5]: inspect.isgeneratorfunction(my_function)
Out[5]: True
In [6]: type(my_function(1))
Out[6]: generator
In [7]: type(my_function(None))
Out[7]: generator
我想象python会做一些代码验证,但在阅读cpython代码时我不明白这是如何工作的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。