当前位置: 首页 > 面试题库 >

如何找到传递给函数的变量的名称?

桂鑫鹏
2023-03-14
问题内容

在C / C++中,我经常发现在调试定义一个宏时很有用,例如ECHO(x),该宏可以打印出变量名及其值(即ECHO(variable)可以打印variable 7)。您可以使用“字符串化操作符的宏来得到变量名#描述这里。有没有办法在Python中做到这一点?

换句话说,我想要一个功能

def echo(x):
    #magic goes here

如果称为foo=7; echo(foo)(或foo=7; echo('foo')可能),它将打印出来foo 7。我意识到如果将变量及其名称都传递给函数,这样做很简单,但是我在调​​试时经常使用类似这样的函数,重复总是使我很烦。


问题答案:

并不是真正的解决方案,但可能会很方便(无论如何您都有echo('foo')疑问):

def echo(**kwargs):
    for name, value in kwargs.items():
        print name, value

foo = 7
echo(foo=foo)

UPDATE: 解决方案echo(foo)inspect

import inspect
import re

def echo(arg):
    frame = inspect.currentframe()
    try:
        context = inspect.getframeinfo(frame.f_back).code_context
        caller_lines = ''.join([line.strip() for line in context])
        m = re.search(r'echo\s*\((.+?)\)$', caller_lines)
        if m:
            caller_lines = m.group(1)
        print caller_lines, arg
    finally:
        del frame

foo = 7
bar = 3
baz = 11
echo(foo)
echo(foo + bar)
echo((foo + bar)*baz/(bar+foo))

输出:

foo 7
foo + bar 10
(foo + bar)*baz/(bar+foo) 11

它的呼叫次数最少,但是对换行符敏感,例如:

echo((foo + bar)*
      baz/(bar+foo))

将打印:

baz/(bar+foo)) 11


 类似资料:
  • 问题内容: 是否可以获取传递给函数的变量的原始变量名?例如 以便: 返回值: 编辑: 我想要做的就是使一个函数像: ..并让函数根据传递给它的变量的名称生成文件名。 我想如果不可能的话,我只需要每次将变量和变量名作为字符串传递。 问题答案: 你不能 在传递给函数之前先对其进行评估。您所能做的就是将它作为字符串传递。

  • 问题内容: 如果我有 我如何在内部找出现在由表示的变量称为? 问题答案: 这是不可能的。即使是按引用传递也不会帮助您。您必须将名称作为第二个参数传递。 但是,您肯定要问的 不是 解决问题的好方法。

  • 问题内容: 我有一个名为testForNull的Java函数 我用它来测试多个对象以确保它们不为空。但是,我无法以这种方式告诉变量名称。 例如。如果我说 我不能说出三行中的哪一行导致了“对象为空”输出。当然,我可以简单地向函数添加另一个参数, 但是我想知道是否可以在不显式传递变量的情况下推断出变量的名称。谢谢。 问题答案: 考虑参数可能不是变量(因此没有名称):

  • 我是的新用户,我想回忆不同变量的代码块,我想做如下事情: 这里的都是中的变量。如果我调用,这部分就可以工作了。但是,我调用的方式仍然没有告诉这个函数group by是由完成的。我怎么让它工作?

  • 问题内容: 我感觉这不可能,但是我想确定已传递给javascript函数的变量的原始变量名。我不知道该如何更好地解释它,所以看看这个例子是否有意义。 这是我正在使用的jquery插件,我希望能够显示传递给“调试”函数的变量的名称。 问题答案: 没错,以任何理智的方式这都是不可能的,因为只有值才传递到函数中。

  • 问题内容: 我有一个PHP函数,该函数需要可变数量的参数(使用和),但是我要传递给该函数的参数数量取决于数组的长度。有没有一种方法可以使用可变数量的参数来 调用 PHP函数? 问题答案: 如果参数在数组中,则该函数可能会对您有兴趣。 如果您要传递的参数数量取决于数组的长度,则可能意味着您可以将它们自己打包到数组中-并将其用于第二个参数。 然后,您传递给该数组的元素将作为不同的参数被函数接收。 例如