0

私は Zelle の Python プログラミングで学んでいて、関数に少し行き詰まりました。

これを取得しました:

def addInterest(balance, rate):
    newBalance = balance * (1+rate)
    balance = newBalance

def test(): 
    amount = 1000
    rate = 0.05
    addInterest(amount, rate)
    print amount

test()

このコードは、出力として 1050 を出力できません。しかし、以下は成功します:

def addInterest(balance, rate):
    newBalance = balance * (1+rate)
    return newBalance

def test():
    amount = 1000
    rate = 0.05
    amount = addInterest(amount, rate)
    print amount

test() 

微妙な違いは、addInterest関数の 3 行目にあります。Zelle はこれを説明しますが、私はまだコツをつかんでいません。1 番のコード (ほぼ同一) が 2 番のコードを実行しない理由を説明していただけますか?

4

3 に答える 3

3

これは、balance内部で変更するオブジェクトが、関数に渡すオブジェクトaddInterestと同じではないためです。amountつまり、関数に渡されたオブジェクトのローカル コピーを変更するため、元のオブジェクトの値はそのまま残ります。Python シェルで次のコードを実行すると、それを確認できます。

>>> def addInterest(balance, rate):
...     print (balance)
...     newBalance = balance * (1 + rate)
...     balance = newBalance
... 
>>> amount = 1000
>>> rate = 0.05
>>> print id(amount)
26799216
>>> addInterest(amount, rate)
1000
>>> 

このid関数は、2 つのオブジェクトが同じかどうかをテストするために使用できるオブジェクトの ID を返します。

于 2013-01-26T11:34:09.887 に答える
0

How do I pass a variable by reference?の美しい回答を確認してください。

    self.variable = 'Original'
    self.Change(self.variable)

def Change(self, var):
    var = 'Changed'
于 2013-01-26T11:44:42.473 に答える
0

キーワードはreturn. Return は、ほとんどの場合、関数から変数に値を返すために使用されます (2 番目のコードでは、変数は ですamount)。

#1では、何も返していませprint amountん。それが、あなたが望むものではない理由です。

2 番目のコードでは、あなたがreturningnewBalance の値です。変数amountは関数と同じ値になりnewBalanceました。

したがって、最初のコードでは、addInterest(amount, rate)何もしません。何も返さないので、役に立ちません。ただし、2番目の機能で行ったことは正しいです。

于 2013-01-26T11:30:40.527 に答える