我尝试跟踪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