我目前正在学习Python并希望有人可以帮助我。 我对编码很新,所以如果解释得好的话会非常有用。
假设我有一个名为function1
的函数返回:
return (row, column)
现在我正在编写另一个名为function2
的函数。
在这个函数中,我需要调用say:
exampleItem.exampleName(row, column, name)
如何使用function1
的输出作为row
的上述行中的column
和function2
参数作为行和列?
我真的希望这是有道理的,因为我之前没有正确地写一个问题而受到严重的惩罚,因为我没有意识到这里的最佳做法。
答案 0 :(得分:7)
在所有版本的Python中,您都可以:
row, column = function1()
exampleName(row, column, name)
在更新版本(3.5+
)中,您可以使用解包来执行以下操作:
exampleName(*function1(), name)
如需进一步阅读,请参阅:PEP 448 -- Additional Unpacking Generalizations。
答案 1 :(得分:6)
您可以使用星号*
解压缩结果 - 这是一个元组 - 在将其作为参数放入另一个之后调用函数function1
功能。这导致在第二个中提供从function1
返回的元素作为位置参数:
exampleItem.exampleName(*function1(), name)
在Python 2.x
中,您可以执行相同操作,但需要以关键字形式提供剩余的位置参数,以使其与*
:
exampleItem.exampleName(*function1(), name=name)
这也适用于Python 3.x,因此您没有可移植性问题。
当然,在先前使用row, column = function1()
的语句中解压缩,然后按位置将它们提供给第二个函数:
exampleItem.exampleName(row, column, name)
是另一种选择。它最终落到了偏好: - )
答案 2 :(得分:2)
这称为" tuple unpacking",它接受元组(或列表)的部分并将它们用作参数。
如果f1(row, column)
是返回(row, column)
的函数(为了一个简单的例子):
a = f1(3, 4)
b = exampleItem.exampleName(*a, name="fish")
# Or, as a one-liner:
b = exampleItem.exampleName(*f1(3,4), name="fish")
这里的主要限制是在上面的tuple-unpacked参数(a
之后,用*
解包)之后,所有其他参数必须按名称分配,而不是位置。
如果您无法提供具体的参数名称,并且如果您仍在使用Python 2,则需要执行以下操作:
x, y = f1(3, 4) # unpacks the length-2 tuple into two variables
b = exampleItem.exampleName(x, y, "fish")
哪个不能制成单线。但是Python 3并不需要这样做,所以你可以做第一个例子而不需要在第三个参数上使用name=
,如果你在Python 3中。
另一个相关注释:如果你使用**
代替,你可以解压缩字典,它与元组解包相同,除了命名参数而不是位置参数。