我想知道如果我只对它返回的一个(或少于全部)变量感兴趣,我是否可以阻止我的函数完成它的所有例程。
为了阐明,假设我有一个具有(一个元组)多个返回的函数:
def func_123(n):
x=n+1
y=n+2
z=n+3
return x,y,z
如果我只对第三个值感兴趣,我可以这样做:
_,_,three = func_123(0)
但我想知道它在函数中是如何工作的。
我的函数是否执行了三个计算,然后才选择“放弃”前两个并给我我想要的一个,或者它是否认识到如果它只执行返回值所需的子例程,它可以做更少的工作我想?如果是第一个,有没有办法解决这个问题(当然,除了为每个计算创建函数并放弃一个独特的函数来组织所有子程序)?
请您参考如下方法:
它将计算并返回所有值。例如
def foo(x):
return x+1, x+2
当我调用这个函数时
>>> foo(1)
(2, 3)
>>> _, a = foo(1)
>>> a
3
>>> _
2
请注意,_ 是一个完全有效且可用的变量名。它只是按照惯例使用来暗示您不希望使用该变量。
最接近您所描述的是将您的函数编写为生成器。例如
def func_123(n):
for i in range(1,4):
yield n + i
>>> a = func_123(1)
>>> next(a)
2
>>> next(a)
3
>>> next(a)
4
通过这种方式,值会被延迟计算和返回,换句话说,只有在需要时才返回。通过这种方式,您可以设计您的函数,使它们按您想要的顺序返回。
