Python:有效地调用多个返回函数的子集变量

mih*_*asa 1 python performance multiple-return-values

如果我只对它返回的一个(或少于总数)变量感兴趣,我想知道是否可以阻止我的函数完成所有例程.

为了阐明,假设我有一个具有(一个元组)多个返回的函数:

def func_123(n):
    x=n+1
    y=n+2
    z=n+3
    return x,y,z
Run Code Online (Sandbox Code Playgroud)

如果我只对第三个值感兴趣,我可以这样做:

_,_,three = func_123(0)
Run Code Online (Sandbox Code Playgroud)

但我想知道它在功能中是如何工作的.

我的函数执行三次计算,然后才选择"删除"前两个并给我一个我想要的或它是否认识到如果只执行返回我想要的值所需的子程序,它可以做很少的工作?如果是第一个,有没有办法解决这个问题(当然,除了为每个计算创建函数并释放一个独特的函数来组织所有子程序)?

Cor*_*mer 5

它将计算并返回所有值.例如

def foo(x):
    return x+1, x+2
Run Code Online (Sandbox Code Playgroud)

当我调用此功能时

>>> foo(1)
(2, 3)
>>> _, a = foo(1)
>>> a
3
>>> _
2
Run Code Online (Sandbox Code Playgroud)

请注意,这_是一个完全有效且可用的变量名称.按惯例使用它意味着您不希望使用该变量.

与您描述的最接近的是将您的函数编写为生成器.例如

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
Run Code Online (Sandbox Code Playgroud)

以这种方式,值被评估并且懒惰地返回,或者换句话说仅在需要时.通过这种方式,您可以制作您的功能,以便按照您想要的顺序返回.