因此,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().
有一种优雅,有效的方法吗?或者我应该只看到关于过早优化的引用并忘记这一点?
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