我有一些帮助函数,我已经将其推送到我根据需要导入的一些支持库中。我有一些函数必须访问globals(),无论函数调用的是什么范围,以简化一些日志记录和字符串构造。一个这样的函数是format_vars,默认情况下尝试使用globals()dict作为字符串格式方法的直接参数。
def format_vars(s, vars=None):
"""Use .format() on a string while providing a dictionary or globals() by default.
Big Fat Warning: globals() is global to module, not script"""
if not vars:
vars = globals()
return s.format(**vars)
这非常有用,为了利用它我不幸地必须从函数创建源代码然后执行它。我在函数定义下面的模块代码中有以下内容。
FORMAT_VARS_SOURCE = inspect.getsource(format_vars)
在想要使用此功能的脚本中,我必须包含该模块,然后执行以下操作:
exec(supportlib.FORMAT_VARS_SOURCE)
我的问题是,是否有更合适的方法可以做到这一点?
答案 0 :(得分:1)
如果您总是希望帮助程序引用直接调用范围,您应该能够使用帮助程序中的inspect.stack()[-1][0].f_globals
从调用范围获取全局变量,我相信。我知道你的标题是“没有检查”,但从问题的文本来看,它看起来真的是“没有引入范围内的时髦代码”。