2

Python の関数から複数の変数を返したい場合は、次のようにしています。

def foo():
    firstName = 'Bob'
    lastName = 'Jones'
    return [firstName, lastName]

次に、名前だけを見つけたい場合は、これを行います

[firstName, dummy] = foo()

しかし、私が最初に機能を持っていたとしましょう

def fooInitial():
    firstName = 'Bob'
    return firstName

lastNameコードの多くの部分からこれを呼び出しました。これまで行ってきた方法で別の出力として追加したい場合は、それを呼び出していたコードの他の場所を変更する必要があります。

a = foo()呼び出しが最初の名前(リストの最初と最後ではない)を与え、最初と最後を与えるMatlabに似た何かをする方法はあり[a,b]=foo()ますか?

4

3 に答える 3

6

いいえ、ありません。を呼び出すすべてのコードを変更するか、2 つのパラメーターを返し、そのメソッドを使用する別のfooInitial()メソッドを追加することをお勧めします。fooInitial()

def barInitial():
    first_name, last_name = 'Bob', 'Jones'
    return first_name, last_name

def fooInitial():
    return barInitial()[0]

リストの代わりにタプルを返すこともできることに注意してください。タプルはコンマのみを定義する必要があるため、構文が軽くなります (角括弧は必要ありません)。戻り値をアンパックするときにも同じことができます。

first_name, last_name = barInitial()
于 2013-08-09T10:34:37.437 に答える
1

あなたはこれを行うことができます:

def foo(last=None):
    # current behaviour, change no code
    If not last:
        return 'bob'

    # new behaviour return first and last list
    return ['bob', 'jones']

デフォルトの引数を持つ名前付きキーワードを追加すると、変更したくないコードの現在の動作が得られ、最初と最後に返される新しいコードが使用されます

first, last = foo(last=true)
于 2013-08-09T12:23:27.117 に答える
0

可能ですが、お勧めしません。

# WARNING: Breaks iteration over chars

class StrOrPair(str):
    def __new__(cls, name, lastname):
        return str.__new__(cls, name)

    def __init__(self, name, lastname):
        str.__init__(self, name)
        self.lastname = lastname

    # __iter__ is used for unpacking
    def __iter__(self):
        yield self
        yield self.lastname

def foo():
    return StrOrPair('Bob', 'Jones')

name = foo()
[first, second] = foo()

print(name) # Bob
print(first) # Bob
print(second) # Jones

# broken iteration over chars:
for c in name:
    print(c) # expect 'B', 'o', 'b' but get 'Bob', 'Jones'
于 2013-08-09T10:58:18.233 に答える