在modu中打印变量值

2024-07-04 13:50:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我的应用程序中有很多常量变量。在这个应用程序中,我导入了一个模块。作为测试的一部分,我想从所述导入模块中的一个函数调用,该函数打印出变量的名称及其值。在

好吧,这不是我的代码,但这显示了我想做什么的概念:

-main.py-
import mymodule
DEBUG = True
BATCH = False
ShowVars(['DEBUG','BATCH'])

-mymodule.py-
def ShowVars(varlist):
  for name in varlist:
    print('{} -> {}').format(name,eval(name))

我在eval(name)中得到了一个错误,“DEBUG is not defined”当然,但我正试图让这个概念发挥作用。在

我发现的一个方法就是改变主.py作为:

^{pr2}$

然后事情就好了,但我不确定我是否喜欢。。。任何想法或轶事都将不胜感激。在


Tags: 模块函数namepydebug名称应用程序概念
3条回答

使用^{} module

import inspect

def ShowVars(varlist):
    frame = inspect.currentframe().f_back
    g = frame.f_globals
    l = frame.f_locals
    for name in varlist:
        print('{} -> {}'.format(name, l.get(name, g.get(name))))

备选方案

在主.py公司名称:

^{pr2}$

在我的模块.py公司名称:

import inspect

def ShowVars(*values):
    line = inspect.stack()[1][4][0]
    names = line.rsplit('(', 1)[-1].split(')', 1)[0] # Extract argument names.
    names = map(str.strip, names.split(','))
    for name, value in zip(names, values):
        print('{} -> {}'.format(name, value))
members = dir(module)
for item in members:
   if not eval('hasattr(module.%s, "__call__")' % item):
      print item, eval("module.%s" % item)

应该给你一个第一个通行证,但你可能希望过滤掉那些以∗和其他项目开头的东西。在

Import inside函数不漂亮,但它可以工作:

在-主.py-在

from mymodule import *
DEBUG = True
BATCH = False

if __name__ == '__main__':
  ShowVars(['DEBUG','BATCH'])

在-我的模块.py-在

^{pr2}$

相关问题 更多 >

    热门问题