/**/

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相关问答推荐

按值和计数聚合,不同的数组

如何判断所有值是否都在 pivot_table 的输入 DataFrame 中,并创建并用 0 填充一些 Python Pandas 中不存在的值?

使用 pyodbc 遍历字典写入数据

如何从函数中截取实例化的类名?

按组划分数据框

如何在 tkinter 中仅绑定 ASCII 键?

我如何矢量化和加速这个 Pandas iterrows?

为什么我的 While 循环内部函数一直返回 True?

如何使用 fastapi-babel 创建多语言网页?

如何使用Pandas 以更快的方式计算相对体积?

使用 vtkSMPTools 的多线程

2个方程的迭代求解导致“无法确定关系的真值”

使用 py-ravendb 列出 RavenDB 集合

如何在散点图框上绘制圆形半径图(Plotly Python)

覆盖 Numpy 中的广播约定?

如何更改决策树分类器模型的阈值?

使用python将文件从服务器的一个位置复制到另一个位置

Python 中最接近零的真值

Pandas 将列变成行

如何查看 Gekko 变量/参数以进行调试?