私は長年にわたってC/C++/Javaのような構文に晒されてきましたが、Pythonの変数が定義されているので、まったく混乱してしまいました。誰もがqの中で言及された3つの間に違いが何かを記述することができますか?Python:グローバル変数と接頭辞「self」を持つ変数との違いは何ですか?ローカル変数とは異なりますか?
答えて
self
は、C++とJavaのthis
のように動作します。 .
演算子(C++では->
)を使用してアクセスできるオブジェクトへの参照を取得します。
Pythonでは、インスタンス変数にアクセスする唯一の方法は、明示的にself
です。インスタンス変数はではなく、は、ローカル変数またはグローバル変数と同じ「通常」のスコープに配置されます。
ちょっと、あなたは、ローカル変数/グローバル変数を使ってインスタンス変数を記述することはできません。あるいは、コンテキストに応じて* local *か* globalのいずれかになります。 –
@KaitlynMcmordie:もしPythonで 'a = 10'を実行すると、常に' a'という名前のローカル変数が設定されます。C++では、 'a'がどのように宣言されたかによって、ローカル変数またはインスタンス変数を設定することができます。 'self.a = 10' – hugomg
'インスタンス変数 'という名前が矛盾しているように私はまだ混乱しています...インスタンス変数が更新されても少なくとも1つのインスタンスがそれを変更したときに、その特定のクラスの\ *すべて\ *ランタイムインスタンシエーションを介して、インスタンスに依存しない変数を呼び出す方が適切ではないでしょうか?それとも基本的には静的変数と呼んでいないのですか? –
グローバル変数は、それだけではなく、グローバルにアクセス可能な変数です。ローカル変数は、単一の関数定義で使用される一時変数など、現在のスコープでしかアクセスできない変数です。インスタンス変数(たとえば、self.
接頭辞を使用する場合)は、オブジェクトの特定のインスタンスに関連付けられたデータです。もちろん、object.x
を使用してオブジェクトの外部にあるインスタンスオブジェクトを参照することもできます。object
はそのオブジェクトへの参照です。
変数に接頭辞self
がある場合、変数はローカルでもグローバルでもありません。これは、オブジェクトの特定のインスタンスの構成の一部です。大まかに言って、インスタンス変数は特定のオブジェクトのプロパティを表します。
次の例では、lx
はローカル変数であり、greet
のローカル変数です。 gx
は、モジュールのどこにでもアクセス可能なグローバル変数です。ix
は、オブジェクトの各インスタンスに固有の値を持つインスタンス変数です。オブジェクト定義の内部で参照される場合は、接頭辞がself
のix
を参照し、オブジェクト参照の接頭辞を持つオブジェクトの外側にある場合は参照します。
gx = "hello"
class Foo:
def __init__(self, who):
self.ix = who
def greet(self):
lx = "%s, %s" % (gx, self.ix)
return lx
foo = Foo("world")
print foo.greet()
print foo.ix
時には第一原理に戻って本当に便利です:
私たちはその「スコープ」(またはコンテキスト)を参照しているローカルまたはグローバル変数であることについて話すとき。関数内の変数は、関数に対してローカルとみなされます。ここでSwaroopの優れたガイド、 'A Byte of Python' からのイラストです:
x = 50
def func(x):
print('x is', x)
x = 2
print('Changed local x to', x)
func(x)
print('x is still', x)
出力:
xは50
変更ローカルX X
2にあることは、まだ50です
次にグローバル変数は、内部と機能の外部コンテキストを横断する方法を示す図である。
x = 50
def func():
global x
print('x is', x)
x = 2
print('Changed global x to', x)
func()
print('Value of x is', x)
出力:
xはグローバルXに変更50
あります2
xの値は2
これはすべてです。
私たちがPythonのオブジェクト指向プログラミングの側面を利用する場合、 '自己'という概念が関連します。クラスインスタンスとインスタンスは「オブジェクト」とみなされ、「自己」とみなされます。接頭辞は、私たちのコードがローカル/グローバル変数を参照するのか、オブジェクトの属性を参照するのかを区別することができます。
もう一度、コンセプトは、禅のような単純さでSwaroopで説明されます。
- 1. ローカル変数とグローバル変数の違い
- 2. クラス変数とグローバル変数の違いは何ですか?
- 3. ローカル変数、インスタンス変数、グローバル変数、およびクラス変数の違いは何ですか?
- 4. Cのポインタとグローバル変数の違いは何ですか?
- 5. ウィンドウとトップのjavascriptグローバル変数の違いは何ですか?
- 6. グローバル変数と内部クラスの違いは何ですか?
- 7. javascriptのローカル変数とグローバル変数
- 8. ループ内のローカル変数とグローバル変数
- 9. javascriptのローカル変数とグローバル変数
- 10. C++のグローバル変数とローカル変数
- 11. JavaScriptのグローバル変数とウィンドウ変数は何ですか?
- 12. データ型変数と変数V2の違いは何ですか?
- 13. Volatile変数とAtomic変数の違いは何ですか?
- 14. definePlugin変数とenv変数の違いは何ですか?
- 15. Ocaml - グローバル変数とローカル変数
- 16. Pythonでのローカル変数とグローバル変数の使用
- 17. (python)私の変数はローカルかグローバルか?
- 18. Rubyのグローバル変数はプロセスごとに異なりますか?
- 19. 不変変数と可変変数の違いは何ですか?
- 20. グローバル変数とPythonは
- 21. 通常の変数とRubyのインスタンス変数との違いは何ですか?
- 22. Pythonのリテラルと変数の違いは何ですか?
- 23. ダブルコロンとグローバル変数の違いは?
- 24. Rustの不変変数とconst変数の違いは何ですか?
- 25. Codeigniterでグローバル変数とコンフィグ変数を作成する違いは何ですか?
- 26. グローバル変数として宣言することなく、Pythonでグローバル変数を使用できますか?
- 27. グローバル変数とローカル変数を設定する
- 28. 同じ行のローカル変数とグローバル変数にアクセスするbash
- 29. セッション中の(Caching)変数と[格納]変数の違いは何ですか?
- 30. C#の静的変数と動的変数の違いは何ですか?
最初。 Pythonの変数は定義されていません。それはあなたの問題の大部分であるかもしれません。あなたは真剣に "グローバル"対 "ローカル"と混乱していますか?そうは思わない。たとえば、**あなたが持っている**具体的な**質問が何を知っていると思うかを書き留めてください。あなたが混乱していることの詳細を記入すると助けになります。コードサンプルは、混乱しているコードに関する特定の事項を記載している場所で役立ちます。 –
私は主に、グローバルとローカルの領域で "自己"がどのようにピクチャに入ってくるのか混乱しています。 –
変数を作成するための用語は「作成」です。代入文は変数を作成します。 –