生成一个Python函数,该函数返回与接收到的参数相同的参数

2024-09-29 02:28:04 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python中,编写返回在运行时收到的相同参数的函数的正确方法是什么

例如:

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

Tags: 方法函数参数returndefwithargspass
2条回答

考虑以下功能:

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

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

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

输出:((1, 2, 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, 2, a=3)
(1, 2, {'a': 3})

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

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

您可以尝试解压缩元组:

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

但你真正需要的是把字典也打开。差不多

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

据我所知,没有办法将最后一个示例合并到单个嵌套函数调用中

相关问题 更多 >