在Python中,如何在函数内将传入的参数作为字符串获取

1 投票
3 回答
3166 浏览
提问于 2025-04-18 12:22

我现在想要获取一个Python函数的参数,并把它们当成字符串使用,因为我想用这些参数来给函数的输出命名。首先,我想创建一个简单的函数,它可以“回显”它的参数(参考这个链接:获取Python函数内部参数名称的列表)。我尝试了以下代码:

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'

换句话说,它返回的是函数定义时的“虚拟”参数,而不是函数被调用时的“当前”参数。有没有人知道我该如何获取后者呢?

3 个回答

-1

要获取那些变量的内容,你只需要用到这些变量本身就可以了。

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

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

我会使用由 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')]
2

使用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'

撰写回答