0

重複の可能性:
Python-値の受け渡しはどのように機能しますか?

変数があり、それをNoneにインスタンス化する場合、複数のスコープの変更を反映する割り当てを行うにはどうすればよいですか?

例えば:

def doStuff(test):
    test = "hello world"

def main():
    test = None
    doStuff(test)
    print(test)

私が正しく推測した場合、「テスト」が値で渡されたため、出力は何もありませんか?関数の前に型を静的に宣言せずに、参照によって渡されるようにする方法はありますか?

4

4 に答える 4

2

これを行うとき:

def main():
    test = None
    doStuff(test)
    print(test)

のスコープ内にある文字列オブジェクト(参照によって参照さtestれる)を基本的に印刷します。の変数によって参照される内部文字列オブジェクトに対して、main()次の3つのいずれかを実行する必要があります。printtestdoStuff

  • print内部のステートメントを使用する必要がありますdoStuff

  • またはglobalキーワードを使用します

  • 'sdoStuffに格納した値を返します。main()test

その最後の部分については、ここで詳細情報を見つけることができます。

于 2013-01-09T23:12:52.537 に答える
0

globalあなたはキーワードを調べることができます。

def doStuff():
    global test
    test = 'Hello World'

キーワードを使用すると、globalグローバル変数に直接割り当てることができます。

于 2013-01-09T23:12:13.547 に答える
0

スコープ内doStuffのの値を変更する場合は、次のように返す必要があります。testmain()

def doStuff(test):
    test = "hello world"
    return test

def main():
    test = None
    test = doStuff(test)
    print(test)

もちろん、この例では、への入力としてtestに合格する理由はないdoStuff()ので、次のようにすることができます。

def doStuff():
    test = "hello world" # These 2 lines could be one
    return test          # return "hello world"

def main():
    test = doStuff()
    print(test)
于 2013-01-09T23:14:48.420 に答える
0

ローカル変数の値を別の関数から直接変更することはできません。他の関数が答えたように、グローバルであると宣言するか、新しい値を返して割り当てることができます。しかし、まだ言及されていないこれを達成する別の方法は、属性の値を保持するラッパークラスを使用することです。次に、ラッパーインスタンスを渡し、属性を変更できます。

class Wrapper():
    """a simple wrapper class that holds a single value which defaults to None"""
    def __init__(self, value=None):
        self.value = value

def main():
    test = Wrapper()
    doSomething(test)
    print(test.value)

def doSomething(x):
    x.value = "something"
于 2013-01-09T23:30:29.827 に答える