Python関数のパラメータ誤りについてのいくつかのまとめ

1353 ワード

Remeber that arguments are passed by assignment in Python  
Pythonのパラメータは付与によって伝達されます
Since assignment just creates references to objects, there's no alias between an argument name in the caller and callee, and so no call-by-reference per se.
付与時にオブジェクトの参照(すなわちアドレス,id(a))が作成され,パラメータと実パラメータの間に別名の関係は存在せず,本質的に参照伝達は存在しない.(Pythonには値伝達/参照伝達の概念は存在しない)
Pythonの変数はラベルのようなもので、変数に値を付与するのは、ラベルを一つの物体に貼り付け、再び値を付与するのはラベルを別の物体に貼ることです.変数にはエンティティは存在しません.いったん別の物体に設定されると、それらの物体(オブジェクト)は変わりません.
外部変数の値を1つの関数で変更するには、次の手順に従います.
  • は、戻り値により
  • を付与する.
  • グローバル変数(global x)
  • を使用
  • listオブジェクトまたはdictオブジェクトの内部要素
  • を変更する
  • クラスのメンバー変数を変更する
  • 例:
    def func(x):
       print('x=',x,id(x))
       y=10
       x+=y
       print('x=',x,id(x))
       return x
    
    a=5
    b=func(a)
    print('a=',a,id(a))
    print('b=',b,id(b))
       

    出力結果:
    x=5, 1452263216
    x=15, 1452236536
    a=5, 1452263216
    b=15, 1452263536
    解読:
    ここで、関数funcのパラメータはxであり、関数内部でのみ有効であり、すなわち、作用ドメインは関数内にのみ存在する.
    変数aは実パラメータとして関数funcに渡されるので,関数内のxの値はaの値であるが,xはaではなく,現在の2人と同じである.
    変数yは関数で定義された局所変数であり,役割ドメインは同様に関数のみである.
    xを付与するとxの値は変化するが,実パラメータaの値には影響しない.
    関数の戻り値はxの値であり、外部の変数bに付与されるので、bの値はxの値であるが、bはxではなく、このときxは存在しない.
    Note:本文はCrossionを学ぶプログラミング教室の「全菊変数と菊部変数」「関数パラメータ伝達について、80%人が間違っている」という2つの文章のまとめで、本文の例と知識点は原文に由来し、オリジナルではない.