2

私が定義する場合

foo = [[1,2],[2,3],[3,4]]
bar = foo

foo と bar は同じオブジェクト、つまり [[1,2],[2,3],[3,4]] を参照します。これらの「タグ/名前空間/参照」のいずれかを使用して、オブジェクト [[1,2]、[2,3]、[3,4]] を変更できるようになりましたが、これはどのように役立ちますか?

4

3 に答える 3

2

名前を既存の値に再バインドすると便利な理由の 1 つは、元の名前を別のオブジェクトに再利用する場合です。たとえばn、フィボナッチ数列の th 番号を計算するこの関数は、 names を再利用aし、ループ内btemp繰り返し、atoによってb(temp を介して) 以前に参照された値を毎回バインドします。

def fib(n):
    a = 1
    b = 0
    for _ in range(n):
       temp = a
       a = a+b
       b = temp
       # A more Pythonic version of the last three lines would be: a, b = a+b, a
    return b
于 2013-09-07T14:26:55.243 に答える
1

クラス インスタンスの属性 があり、クラスfrobnozのインスタンスへの参照があり、このFrobnozクラスのインスタンスは、関連するすべての marfoo のリストである属性marfoosであり、最初のものに対していくつかの操作を実行したいとします。

marfoo = self.frobnoz.marfoos[0]
marfoo.rotate(CLOCKWISE, degrees=90)
if marfoo.is_cloudy():
    self.purge_clouds(marfoo)

アクションを実行したい marfoo への追加の参照を作成できなかった場合、それへの長い参照が必要になるだけでなく、参照と最初の要素の両方を検索する費用が発生しfrobnozますmarfoos。使いたいたびにリストの。

于 2013-09-07T14:08:09.257 に答える
0

これは、値を変更する関数呼び出しに (とりわけ) 役立ちます。

def changeFoo(bar):      
    bar[0][0]=3.14

changeFoo(foo)

注: これは技術的に代入を使用しませんが、同等です。

複数のオブジェクトが同じオブジェクトへの参照を持つ必要がある場合にも使用できます (リンクされたリストなど)。

于 2013-09-07T14:09:08.127 に答える