Python 将元组扩展为参数
有没有办法将Python元组扩展为函数-作为实际参数 例如,这里的Python 将元组扩展为参数,python,tuples,parameter-passing,Python,Tuples,Parameter Passing,有没有办法将Python元组扩展为函数-作为实际参数 例如,这里的expand()发挥了神奇的作用: some_tuple = (1, "foo", "bar") def myfun(number, str1, str2): return (number * 2, str1 + str2, str2 + str1) myfun(expand(some_tuple)) # (2, "foobar", "barfoo") 我知道可以将myfun定义为myfun((a,b,c)),但当然
expand()
发挥了神奇的作用:
some_tuple = (1, "foo", "bar")
def myfun(number, str1, str2):
return (number * 2, str1 + str2, str2 + str1)
myfun(expand(some_tuple)) # (2, "foobar", "barfoo")
我知道可以将myfun
定义为myfun((a,b,c))
,但当然也可能有遗留代码。
谢谢myfun(*一些元组)
完全按照您的要求执行。*
运算符只需解压缩元组(或任何iterable)并将其作为位置参数传递给函数。阅读更多信息。myfun(*一些元组)
完全按照您的要求执行。*
运算符只需解压缩元组(或任何iterable)并将其作为位置参数传递给函数。阅读更多信息。查看第4.7.3节和第4.7.4节。
它讨论将元组作为参数传递
我也会考虑使用命名参数(并通过字典),而不是使用元组和传递序列。我发现当位置不直观或存在多个参数时,使用位置参数是一种不好的做法
看看第4.7.3节和第4.7.4节。 它讨论将元组作为参数传递我也会考虑使用命名参数(并通过字典),而不是使用元组和传递序列。我发现当位置不直观或存在多个参数时,使用位置参数是一种不好的做法
注意,您还可以展开参数列表的一部分:myfun(1, *("foo", "bar"))
请注意,您还可以展开参数列表的一部分:
myfun(1, *("foo", "bar"))
这是函数式编程方法。它将元组扩展功能提升到语法之外:
apply_tuple = lambda f, t: f(*t)
重新定义apply\u tuple
via,从长远来看可以节省大量partial
调用:
from toolz import curry
apply_tuple = curry(apply_tuple)
用法示例:
from operator import add, eq
from toolz import thread_last
thread_last(
[(1,2), (3,4)],
(map, apply_tuple(add)),
list,
(eq, [3, 7])
)
# Prints 'True'
这是函数式编程方法。它将元组扩展功能提升到语法之外:
apply_tuple = lambda f, t: f(*t)
重新定义apply\u tuple
via,从长远来看可以节省大量partial
调用:
from toolz import curry
apply_tuple = curry(apply_tuple)
用法示例:
from operator import add, eq
from toolz import thread_last
thread_last(
[(1,2), (3,4)],
(map, apply_tuple(add)),
list,
(eq, [3, 7])
)
# Prints 'True'
与@Dominykas的答案类似,这是一个将多参数接受函数转换为元组接受函数的装饰器:
apply_tuple = lambda f: lambda args: f(*args)
例1:
def add(a, b):
return a + b
three = apply_tuple(add)((1, 2))
例2:
@apply_tuple
def add(a, b):
return a + b
three = add((1, 2))
与@Dominykas的答案类似,这是一个将多参数接受函数转换为元组接受函数的装饰器:
apply_tuple = lambda f: lambda args: f(*args)
例1:
def add(a, b):
return a + b
three = apply_tuple(add)((1, 2))
例2:
@apply_tuple
def add(a, b):
return a + b
three = add((1, 2))
似乎只有当扩展的元组位于通常提供的参数之后时,您才能这样做-解释器不喜欢我这样做:
some\u func(*tuple\u of\u stuff,另一个参数)
@Quackmatic在Python 3.5中,在任何位置都有扩展的元组似乎都可以正常工作。1@Quackmatic附议@River,这在Python3.5.4中运行良好:def func(a,b,c,d):打印(a,b,c,d)
withargs=('fee','fi','fo');func(*args,'fum')
似乎只有当扩展的元组位于通常提供的参数之后时,才可以这样做-解释器不喜欢我这样做:一些func(*tuple\u of_stuff,另一个_参数)
@Quackmatic在Python 3.5中,将扩展的元组放在任何位置似乎都可以正常工作。1@Quackmatic附议@River,这在Python3.5.4中运行良好:def func(a,b,c,d):打印(a,b,c,d)
withargs=('fee','fi','fo');func(*args,'fum')
这对初学者没有帮助。它使用第三方模块,并做其他令人困惑的事情…toolz是第三方的,这是我的意思不是每个答案都必须适合初学者对于你给出的示例,可以使用starmap
这是一个糟糕的答案这对初学者没有帮助。它使用第三方模块,并做其他令人困惑的事情…toolz是第三方的,这是我的意思不是每个答案都必须适合初学者对于您给出的示例,可以使用starmap
这是一个糟糕的答案*操作符只是将元组解包并将它们作为位置参数传递给函数。请注意,列表和元组可以使用相同的语法。我发现列表(事实上,任何iterable,包括字符串)也可以使用相同的语法,但不确定它们的可变性如何影响事情。*操作符只需将元组解包并将它们作为位置参数传递给函数。请注意,列表和元组可以使用相同的语法。我发现列表(事实上,任何iterable,包括字符串)也可以使用相同的语法,但不确定它们的可变性如何影响事情。您还可以定义:def add(some_tyuple:tuple)然后使用索引进行访问您还可以定义:def add(some_tyuple:tuple)然后使用索引进行访问