1

関数が返す変数の 1 つ (または合計より少ない数) だけに関心がある場合、関数がすべてのルーチンで機能するのを防ぐことができるかどうかを知りたいです。

説明するために、複数の戻り値 (のタプル) を持つ関数があるとします。

def func_123(n):
    x=n+1
    y=n+2
    z=n+3
    return x,y,z

3 番目の値だけに関心がある場合は、次のようにします。

_,_,three = func_123(0)

しかし、関数でどのように機能するか知りたいです。

私の関数は 3 つの計算を実行し、その後最初の 2 つを「ドロップ」して、私が望むものを与えることを選択しますか、それとも、必要な値を返すために必要なサブルーチンのみを実行する場合、はるかに少ない作業を実行できることを認識しますか? 最初の場合、これを回避する方法はありますか (もちろん、計算ごとに関数を作成し、すべてのサブルーチンを整理するために一意の関数を手放します)?

4

4 に答える 4

5

すべての値を計算して返します。例えば

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

このようにして、値は遅延して評価され、返されます。つまり、必要な場合にのみ返されます。このようにして、必要な順序で返されるように関数を作成できます。

于 2015-06-02T16:55:26.727 に答える
3

何かを「選択」したり「ドロップ」したりしません。使用しているのはタプル割り当てです。具体的には、戻り値を tuple に割り当てています(_,_,three)_変数は、「捨てる」変数の単なる慣習です。

于 2015-06-02T16:56:07.347 に答える