制作一个 Python 函数,返回与接收到的参数相同的参数

问题描述

在 Python 中编写一个函数的正确方法是什么,该函数将返回它在运行时收到的完全相同的参数?

例如:

def pass_thru(*args,**kwargs):
    # do something non-destructive with *args & **kwargs
    return ??? <- somehow return *args & **kwargs

解决方法

考虑以下函数:

def a(*args,**kwargs):
    return args,kwargs

当我们调用函数时,返回的值是一个元组,首先包含另一个带有参数的元组,然后是一个带有关键字参数的字典:

b = a(1,2,3,a='foo')
print(b)

输出:((1,3),{'a': 'foo'})

print(b[0]) # Gives the args as a tuple
print(b[1]) # Gives the kwargs as a dictionary
,

问题在于您的参数只是一系列值,而不是您可以操作的值本身。关键字参数本身不是一等值(即 a=3 不是值);它们纯粹是一种句法结构。

*** 参数让你成功了:

def pass_thru(*args,**kwargs):
    return *args,kwargs

然后

>>> pass_thru(1,a=3)
(1,{'a': 3})

但是你不能简单地把它传回 pass_thru;你会得到不同的结果。

>>> pass_thru(pass_thru(1,a=3))
((1,{'a': 3}),{})

您可以尝试解包元组:

>>> pass_thru(*pass_thru(1,a=3))
(1,{'a': 3},{})

但你真正需要的是解压字典。类似的东西

>>> *a,kw = pass_thru(1,a=3)
>>> pass_thru(*a,**kw)
(1,{'a': 3})

据我所知,没有办法将最后一个例子组合成一个单一的、嵌套的函数调用。