在Python中,如何在函数内将传入的参数作为字符串获取
我现在想要获取一个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'