在Python中,有没有一种紧凑的方法可以在满足条件的列表中打印这些变量的名称?

2024-10-17 06:20:43 发布

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

我正在为脚本的调试模式编写一些打印输出。有没有一种简洁的方法来打印满足条件的列表中那些变量的名称?你知道吗

specification_aw3 = 43534
specification_hg7 = 75445
specification_rt5 = 0
specification_nj8 = 5778
specification_lo4 = 34
specification_ee2 = 8785
specification_ma2 = 67
specification_pw1 = 1234
specification_mu6 = 0
specification_xu8 = 12465

specifications = [
    specification_aw3,
    specification_hg7,
    specification_rt5,
    specification_nj8,
    specification_lo4,
    specification_ee2,
    specification_ma2,
    specification_pw1,
    specification_mu6,
    specification_xu8
]

if any(specification == 0 for specification in specifications):
    # magic code to print variables' names
    # e.g. "variables equal to 0: \"specification_rt5\", \"specification_mu6\"

正如9000suggests一样,对于我在这里定义的最小工作示例,定义字典是一种合理的方法,这是不言而喻的。请假设这对于现有的代码项目来说不是一个可行的选项,并且我正在寻找一个快速、紧凑(看起来很难看)的代码位,只用于调试。你知道吗


编辑:类似于我想要的东西的插图

以下是我要寻找的开始:

print("specifications equal to zero:")
callers_local_objects = inspect.currentframe().f_back.f_locals.items()
for specification in [specification for specification in specifications if specification == 0]:
    print([object_name for object_name, object_instance in callers_local_objects if object_instance is specification][0])

基本上,有没有一个紧凑的方式来做这样的事情?你知道吗


Tags: to方法inforifobjectspecificationprint
2条回答

我建议使用dict代替一堆变量:

specification = {
  'aw3': 0,
  'foo': 1,
  'bar': 1.23,
  # etc
} 

您可以按名称访问对象,如specification['aw3']。你知道吗

然后可以找出值为0的名称:

zeroed = [name for (name, value) in specification.items() if value == 0]

此外,由于您提到打印,因此该行将是:

for element in specification_dictionary:
  print(element)

您可以将它与上面的列表理解结合起来,只打印符合您的情况的元素。在本例中,元素只打印变量名(key),如果您想同时打印key和value,只需将其设置为使用规范_字典.items(). 干杯。你知道吗

>>> specification = { 'aw3': 0, 'foo': 1}
>>> for element in specification:
...     print(element)
... 
foo
aw3
>>> for (key, value) in specification.items():
...     print(str(key) + " " + str(value))
... 
foo 1
aw3 0
>>> for element in specification.items():
...     print(element)
... 
('foo', 1)
('aw3', 0)

相关问题 更多 >