有一些测试代码:
some_type = int
def func0():
def func1(arg: some_type, /):
pass
func0()
我收到以下错误:
Traceback (most recent call last):
...
SystemError: no locals when loading 'some_type'
但是,下面的代码按预期工作:
some_type = int
def func0():
def func1(arg: some_type):
pass
func0()
这个也是有效的:
some_type = int
exec('''
def func1(arg: some_type, /):
pass
''')
我知道在未来的版本中,注释将不再在定义时进行评估;也可以在 3.7+ 版本中激活这种行为。就像是
from __future__ import annotations
some_type = int
def func0():
def func1(arg: some_type, /):
pass
func0()
也没有问题。但是,问题是关于函数定义时当前的奇怪行为。some_type
绝不是 的局部变量func0
,尽管 python 这么认为。一个更好的版本:
def func0():
some_type = int
def func1(arg: some_type, /):
pass
func0()
我已经阅读了PEP 570,但没有找到任何关于注释声明的内容。
我的python版本:
sys.version_info(major=3, minor=8, micro=0, releaselevel='final', serial=0)