Python PyCharm是否支持全局类型提示?
我已尝试在python_存根中设置全局设置,如下所示:Python PyCharm是否支持全局类型提示?,python,pycharm,type-hinting,Python,Pycharm,Type Hinting,我已尝试在python_存根中设置全局设置,如下所示: #Inside MyModule.pyi global MY_GLOBAL #type: list[MyClass] #Inside MyModule.py MY_GLOBAL #type: list[MyClass] #Still in the global scope here MY_GLOBAL[0].xyz #<-- Type hinting works here! 但是,当我尝试在main.py文件中索引到我的全局列表
#Inside MyModule.pyi
global MY_GLOBAL #type: list[MyClass]
#Inside MyModule.py
MY_GLOBAL #type: list[MyClass]
#Still in the global scope here
MY_GLOBAL[0].xyz #<-- Type hinting works here!
但是,当我尝试在main.py文件中索引到我的全局列表时,这似乎不起作用:
#Back inside MyModule.py
MY_GLOBAL[0].xyz #<-- Expecting type hinting to pop up after the '.'
#返回MyModule.py内部
MY_GLOBAL[0].xyz#这不是类型暗示的问题。问题是实际上根本没有MY_GLOBAL
变量
global MY\u global
不是创建全局变量的方式。Python中没有真正的全局变量。创建模块级全局变量的方法与创建局部变量的方法相同:
MY_GLOBAL = []
但是在模块级别,而不是在函数中。如果要从其他模块访问它,则需要导入该模块并使用虚线访问符号:
import whichever_module_defined_the_global as m
m.MY_GLOBAL.append(3)
尝试使用from
导入将导致奇怪的问题,所以不要这样做
*除了像max
或open
之类的东西之外,这不是类型暗示的问题。问题是实际上根本没有MY_GLOBAL
变量
global MY\u global
不是创建全局变量的方式。Python中没有真正的全局变量。创建模块级全局变量的方法与创建局部变量的方法相同:
MY_GLOBAL = []
但是在模块级别,而不是在函数中。如果要从其他模块访问它,则需要导入该模块并使用虚线访问符号:
import whichever_module_defined_the_global as m
m.MY_GLOBAL.append(3)
尝试使用from
导入将导致奇怪的问题,所以不要这样做
*除了像max
或open
之类的东西,谢谢你的回复,我想我可能把第一行打错了。正如您所描述的,它应该只是我的_GLOBAL=[]。然而,我确实设法解决了我的问题。我必须在本地函数范围中删除对“global”的引用,在这里我需要类型提示。实际上,max
和open
等也不是全局的,问题是模块\uuuuuu内置\uuuuuu
被导入(并将其内容添加到全局范围中,如globals()['thing']=thing
)每次解释器启动时,除非它通过了-s
开关。@ocket888:不,它不是这样工作的。模块是内置的
或内置的
,它不会将其内容转储到全局()中
;当在模块globals中找不到名称时,它将用作回退。在引擎盖下,框架对象有一个存储其全局变量dict的f_内置项
成员,该成员使用另一个框架的f_内置项
或\u内置项
全局变量进行设置,而\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
通常设置为内置模块或该模块的dict。此外,-s
对内置变量回退没有影响;它禁用了站点
模块的自动导入。感谢您的回复,我想我可能键入了第一行。正如您所描述的,它应该只是我的_GLOBAL=[]。然而,我确实设法解决了我的问题。我必须在本地函数范围中删除对“global”的引用,在这里我需要类型提示。实际上,max
和open
等也不是全局的,问题是模块\uuuuuu内置\uuuuuu
被导入(并将其内容添加到全局范围中,如globals()['thing']=thing
)每次解释器启动时,除非它通过了-s
开关。@ocket888:不,它不是这样工作的。模块是内置的
或内置的
,它不会将其内容转储到全局()中
;当在模块globals中找不到名称时,它将用作回退。在引擎盖下,框架对象有一个存储其全局变量dict的f_内置项
成员,该成员使用另一个框架的f_内置项
或\u内置项
全局变量进行设置,而\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
通常设置为内置模块或该模块的dict。此外,-s
对内置变量回退没有影响;它禁用了站点
模块的自动导入。标题与此处回答的实际问题无关。标题与此处回答的实际问题无关