在Python中传递具有多个返回值作为参数的函数

2024-04-25 19:58:09 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,Python函数可以返回多个值。我突然想到,如果有可能的话,这样做会很方便(虽然可读性稍差一点)。

a = [[1,2],[3,4]]

def cord():
    return 1, 1

def printa(y,x):
    print a[y][x]

printa(cord())

……但不是。我知道您可以通过将两个返回值都转储到临时变量中来执行相同的操作,但这看起来并不优雅。我也可以将最后一行重写为“printa(cord()[0],cord()[1])”,但这将执行cord()两次。

有没有一种优雅、高效的方法来做到这一点?或者我应该看看那句关于过早优化的话,然后忘记这一点吗?


Tags: 方法函数returndefprint可读性返回值cord
3条回答

实际上,Python并不是真的返回多个值,而是返回一个值,这个值可以是打包成一个元组的多个值。这意味着您需要“解包”返回的值才能有倍数。 像这样的陈述

x,y = cord()

这样做,但是直接使用返回值

printa(cord())

不,这就是为什么你需要用星号。对它来说,一个很好的术语可能是“隐式元组解包”或“无赋值元组解包”。

printa(*cord())

这里的*是一个参数扩展运算符。。。好吧,我忘记了它的技术调用,但在这个上下文中,它接受一个列表或元组并将其展开,以便函数将每个列表/元组元素看作一个单独的参数。

它基本上与*相反,您可以使用它来捕获函数定义中的所有非关键字参数:

def fn(*args):
    # args is now a tuple of the non-keyworded arguments
    print args

fn(1, 2, 3, 4, 5)

打印(1, 2, 3, 4, 5)

fn(*[1, 2, 3, 4, 5])

做同样的事。

试试这个:

>>> def cord():
...     return (1, 1)
...
>>> def printa(y, x):
...     print a[y][x]
...
>>> a=[[1,2],[3,4]]
>>> printa(*cord())
4

星号的基本意思是“使用此集合的元素作为位置参数”。您也可以使用两个星号对关键字参数执行dict:

>>> a = {'a' : 2, 'b' : 3}
>>> def foo(a, b):
...    print a, b
...
>>> foo(**a)
2 3

相关问题 更多 >