Python3.6.5

this answer为指南,我try 查看是否导入了一些模块,如math.

但Python告诉我,它们都是进口的,而实际上它们不是进口的.

>>> import sys
>>> 'math' in sys.modules
True
>>> 'math' not in sys.modules
False
>>> math.pi
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'math' is not defined
>>> import math
>>> 'math' in sys.modules
True
>>> math.pi
3.141592653589793

推荐答案

为了解释这一点,让我们定义这个函数:

def import_math():
    import math

import_math()

上面的函数将导入模块数学,但仅在其局部作用域中,任何试图在其外部引用math的人都将收到名称错误,因为math未在全局作用域中定义.

导入的任何模块都会保存到sys.MODULES中,因此调用判断

import_math()
print("math" in sys.modules)

将打印True,因为sys.ules缓存在任何位置加载的任何模块,无论它是否在全局范围内可用,因此在全局范围中定义math的一种非常简单的方法是

import_math()
math = sys.modules["math"]

这将把它从仅在sys.modules中转换为在全局范围内,这恰好相当于

import math

其在全局范围内定义指向模块math的变量math.

现在,如果您想要查看"数学"是否存在于全局作用域中,则直接判断它是否位于全局作用域中.

print("math" in globals())
print("math" in locals())

如果"MATH"没有导入到全局或本地作用域中,因此不可访问,则该函数将输出FALSE.

Python相关问答推荐

在不同的帧B中判断帧A中的子字符串,每个帧的大小不同

如何将数据帧中的timedelta转换为datetime

PYTHON、VLC、RTSP.屏幕截图不起作用

polars:有效的方法来应用函数过滤列的字符串

Pandas 数据帧中的枚举,不能在枚举列上执行GROUP BY吗?

数据框,如果值在范围内,则获取范围和

比较两个有条件的数据帧并删除所有不合格的数据帧

Regex用于匹配Python中逗号分隔的AWS区域

TypeError:';Locator';对象无法在PlayWriter中使用.first()调用

Django-修改后的管理表单返回对象而不是文本

保存由PYTHON在EXCEL中所做更改的问题

我的浮点问题--在C++/Python中的试用

元组列表:如果第一个元组元素匹配,则合并两个数据帧列

在动态创建带有图像的按钮时遇到问题

Python数据类和SQLITE3适配器

嘲弄直接导入的函数?

[]和Expression API的区别是什么?

如何编写拆分和 Select 每个PANAS列中的第一个元素的Python函数

Django FileResponse在处理大文件时崩溃

Shopware 6 REST-API产品更新不起作用