微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何将解包迭代器作为参数传递给函数?

如何解决如何将解包迭代器作为参数传递给函数?

我有一个关于在函数中传递参数的问题。 在 python 中,当你想在右侧解压一个可迭代的 obj 时,你必须在某些上下文中进行,比如元组或集合等。 例如,你不能说:

a,b = *(1,2)

你应该说:

a,b = (*(1,2),) // a=1,b=2

或者你可以说:

a,b = {*(1,2)} //a=1,b=2 or a=2,b=1

我说得对吗?

但是,当您想解压可迭代对象,然后将其作为参数传递给函数时,您根本不需要任何上下文,只需解压可迭代对象即可。 例如:

def f(param1,param2):
     pass
f(*(1,2))  

并且您不需要像以前那样使用某种上下文。例如,您不说:

f({*(1,2)}) // it will be f({1,2})

我认为在这种情况下我们不使用 {} 或任何其他上下文,因为我们在 f 函数中寻找传递 2 个值作为参数。因此,我假设我们必须说 f(*(1,2)) 而不是 f({*(1,2)})

如果我是对的,你能解释一下 f(*(1,2)) 如何在不使用任何上下文的情况下工作吗?

解决方法

f(*(1,2)) 确实有上下文!上下文是函数参数本身的列表(和字典)。本质上,在函数调用 f(...) 中,括号之间的内容可以看作是元组和字典文字之间的混合体(仅使用 x=4 而不是 'x': 4),然后得到传递给函数:

>>> def f(*args,**kwargs):
...     print(args,kwargs)
>>> l = [10,11]; d = {'a': 12,'b': 13}
>>> f(1,*l,2,3,x=4,y=5,**d,z=6)
(1,10,11,3) {'x': 4,'y': 5,'a': 12,'b': 13,'z': 6}

这样看来,您可以将序列和字典解压缩到这种上下文中是完全合理的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。