2024-09-29 02:28:04 发布
网友
在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, 2, 3), {'a': 'foo'})
((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不是一个值);它们纯粹是一种句法结构
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(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})
据我所知,没有办法将最后一个示例合并到单个嵌套函数调用中
考虑以下功能:
调用函数时,返回的值是一个元组,首先包含另一个具有参数的元组,然后是一个具有关键字参数的字典:
输出:
((1, 2, 3), {'a': 'foo'})
问题在于,您的参数只是一系列值,而不是您可以操纵的值本身。关键字参数本身不是一级值(也就是说,
a=3
不是一个值);它们纯粹是一种句法结构*
和**
参数让您走到了一半:然后
但是你不能简单地把它传递回
pass_thru
;你会得到不同的结果您可以尝试解压缩元组:
但你真正需要的是把字典也打开。差不多
据我所知,没有办法将最后一个示例合并到单个嵌套函数调用中
相关问题 更多 >
编程相关推荐