是否可以在python中解包元素并将其直接传递给几个函数,而无需先将它们分配给变量? e。 g。
def my_function():
return (1, 2)
# Not sure how the syntax would look like?
(function_1(#first element here), function_2(#second element here)) <= my_function()
答案 0 :(得分:1)
有可能不将输出分配给任何变量,例如通过两次调用该函数,从理论上讲,仅当该函数是纯函数时才有意义。但是,我找不到任何有用的示例。我很好奇您为什么要这样做。
答案 1 :(得分:1)
有一种方法可以实现该目标。 这将需要您创建自己的方法来实现。
这是您可能想要执行此操作的简单方法。
在我的示例中,有一个名为dissolve_args_to_fns
的函数可以接受函数,还有一个list
可以保存输入函数的值。
dissolve_args_to_fns
实施
from typing import Tuple, Any
from collections.abc import Iterable
def dissolve_args_to_fns(*fns, inputs: Tuple[Any, ...]):
# If there are more inputs than there are functions, and vice-versa, throw error
if len(fns) != len(inputs):
raise ValueError('The numbers of functions dont match the number of inputs each function')
# Holds the output corresponding to each function
outputs = []
for i, fn in enumerate(fns):
# Individual input for each function
inp = inputs[i]
# Checks if the input for the function is an iterable
# If so, then its probably for an argument that need multiple arguments
if isinstance(inp, Iterable) :
fn_out = fn(*inp)
else:
fn_out = fn(inp)
outputs.append(fn_out)
# returns an output if, there is any function that has an output
# This extra checking step is not necessary
if any(map(lambda x: x is not None, outputs)):
return outputs
现在功能已完成,我们可以开始对其进行测试。 下面是3个自定义函数,其中一些具有输出,而其他则没有输出
def show(value):
print("Here is", value)
def blink(value, blink_count:int = 2):
print(f" *blink* {value}" * blink_count)
def full_name(first_name, last_name) -> str:
return "%s %s" % (first_name, last_name)
我还将使用sum
内置函数来显示此实现可以使用的范围
_, name, _, _sum = dissolve_args_to_fn(show, full_name, blink, sum, inputs=(1, 2, ("Mike", "Tyson"), ([10, 5],)))
print("My name is", name)
print("Sum is:", _sum)
就是这样。现在,这个简单的功能就像魔术一样。
快乐的编码。
PS:如您所见,简单的实现不适用于关键字参数,但可以随意随意修改代码
答案 2 :(得分:0)
以下是对您在进一步评论中描述的内容的影响:
list1 = []
list2 = []
def my_function():
return (1, 2)
def function_1(x1):
list1.append(x1)
def function_2(x2):
list2.append(x2)
lam = lambda x: (function_1(x[0]), function_2(x[1]))
lam(my_function())
验证:
>>> print(list1)
[1]
>>> print(list2)
[2]