在Python中,将函数作为字符串传递给函数

时间:2014-07-07 16:22:07

标签: python

我目前正在尝试将Python函数的参数作为字符串来访问,因为我想在函数输出的命名约定中使用它们。首先,我首先要创建一个简单地“回应”其参数的函数(参见Getting list of parameter names inside python function)。我试过这个:

import inspect

def echo_arguments(arg1,arg2):
    frame = inspect.currentframe()
    args, _, _, _ = inspect.getargvalues(frame)
    arg1=args[0]
    arg2=args[1]
    return arg1, arg2

但是,如果我试着打电话,我明白了:

>>> (h1,h2)=echo_arguments('hello','world')
>>> h1
'arg1'
>>> h2
'arg2'

换句话说,它从定义函数时返回'dummy'参数,而不是在调用函数时返回'current'参数。有谁知道我怎么能得到后者?

3 个答案:

答案 0 :(得分:1)

使用getargvalues返回的本地人:

import inspect

def echo_arguments(arg1,arg2):
    frame = inspect.currentframe()
    args, _, _, locals_ = inspect.getargvalues(frame)
    return (locals_[arg] for arg in args)

结果:

>>> (h1,h2)=echo_arguments('hello','world')
>>> h1
'hello'
>>> h2
'world'

答案 1 :(得分:0)

获取这些变量的内容所需要的只是变量本身

def echo_arguments(arg1, arg2):
    return arg1, arg2

>>> (h1, h2) = echo_arguments('hello', 'world')
>>> h1
'hello'
>>> h2
'world'

答案 2 :(得分:0)

我会使用inspect.getargvalues()返回的ArgInfo对象。它包括参数名称以及本地词典中的当前值。

In [1]: import inspect

In [2]: def foo(a,b=None):
   ...:     frame = inspect.currentframe()
   ...:     args = inspect.getargvalues(frame)
   ...:     return args

In [3]: args = foo(1234,b='qwerty')

In [4]: print args
ArgInfo(args=['a', 'b'], varargs=None, keywords=None, locals={'a': 1234, 'frame': <frame object at 0x072F4198>, 'b': 'qwerty'})

In [5]: print [(arg,args.locals[arg]) for arg in args.args]
[('a', 1234), ('b', 'qwerty')]