Python 3.8 对仅位置函数参数有一个新的语法特性。当我将此功能与注释结合使用并为代码生成符号表时,似乎缺少一个符号。
没有位置参数:
>>> import symtable
>>> symtable.symtable('def f(x: y): pass', '?', 'exec').get_symbols()
[<symbol 'f'>, <symbol 'y'>]
这是意料之中的。f
并且y
是全局范围内的符号。现在我添加一个/
来标记仅位置参数:
>>> symtable.symtable('def f(x: y, /): pass', '?', 'exec').get_symbols()
[<symbol 'f'>]
这似乎是错误的。缺少符号y
,尽管它仍然是注释,x
因此仍应存在于根符号表中。这是一个内部错误,还是我错过了这个新功能的副作用?
(我使用的是 CPython 3.8.0。)