在将被导入的函数中按名称获取变量 Python

Get variable by name inside function that will be imorted Python

我尝试跟踪 dataframe 的变化以在 Jupiter 笔记本的末尾创建报告,因此我使用 magic 作为它。我得到一些数据框的名称作为字符串,需要获取它的值。我使用了 globals()['df'] 一切都很好,直到我将 magics_class 移到一个单独的文件中,以便在导入时它使用另一个 globals().

是否有任何机制可以使导入的模块使用导入模块的全局变量或任何其他方法来按名称获取变量的值?

示例:

import pandas as pd
def print_df_by_name(name='df'):
    print(globals()[name])
df = pd.DataFrame({'A': [1,2]})
print_df_by_name('df')

一切正常,现在创建文件 my_module.py 内容如下:

def print_df_by_name(name='df'):
    print(globals()[name])

def show_module_globals_keys():
    print(globals().keys())

如果我们尝试导入我们的模块,该功能将不起作用:

from my_module import *

import pandas as pd
df = pd.DataFrame({'A': [1,2]})

print_df_by_name('df')

这会引发错误,因为它使用了文件的全局变量,可以从我们创建的第二个函数中看出:

show_module_globals_keys()

您可以将调用模块的 __name__ 传递给打印函数并使用它来获取 DataFrame

my_module.py

import sys

def print_df_by_name(name='df', module_name=None):
    print(getattr(sys.modules[module_name], name))

calling_script.py

import pandas as pd

from my_module import *

df = pd.DataFrame({'A': [1,2]})

print_df_by_name(name='df', module_name=__name__)

产出

§ python calling_script.py
   A
0  1
1  2