Python 変数、コンテナですか、それともラベルですか?

入門チュートリアル、ケースのソースコード、学習教材、読者層

python666.cnにアクセスしてください。 

みなさんこんにちは、Crossinのプログラミング教室へようこそ!

前回は、Python の変数の基本について少しお話しました。今日はこの話題の続きをしましょう。

1. 変数の代入

前述したように、Python の「代入」演算子は等号 (=) です。変数は代入操作を通じて作成でき、変数の既存の値を変更することもできます。

すると誰かがこう言います。

a = 1 を割り当てることができるのに、1 = a ではエラーが報告されるのはなぜですか? それはすべて方程式ではないでしょうか?

これは、Python の代入演算子 (=) が数学における等価と同等ではないためです。数学では、方程式は交換法則を満たしており、左辺と右辺を入れ替えても問題ありません。しかし、プログラミングにおける代入は方向性があり、等号の右側の結果を左側の変数に代入します。

割り当ての方向性を理解すると、多くの文法を理解するのが簡単になります。

a = 1

右側の値 1 を左側の変数 a に代入するというものですが、これで問題ありません。

1 = a

右側は変数 a の値で問題ありませんが、左側に割り当てられた値は値であり、機能しないため、エラーが報告されます。

右側の「結果」は左側の変数に代入されるため、右側は固定値だけでなく計算式にすることもできます。

a = 1 + 2 * 3 ** 4 / 5

この計算には変数を含めることもできます。

b = 3
a = b * 2 + 3

計算式自体が実行可能であれば、関数を含めることもできます。

a = input() + 'abc'

したがって、割り当てられた変数自体も、右側の計算式の一部として使用できます。

a = 2
a = a + 1

この式は数学的な観点からは明らかに有効ではありませんが、プログラミングでは非常に一般的であり、その機能は変数 a の値を 1 増やすことです。

簡略化した書き方もあります。

a += 1

-=、*=、/=、%=、//= などもあります。

C++ を学習したことがある場合は、変数を 1 ずつインクリメントする次のステートメントを記述する、より単純な方法があることを知っているはずです。

a++

ただし、申し訳ありませんが、これは Python なので、このように書くことはできません。

数学における等価性に関しては、Python には次のようなより近い比較演算子 (==) があります。

a == 1
2 == a
1 + 3 == a + 3

左辺と右辺の計算結果が等しいか、結果が True か False かを判定 (==) するために使用されます。これについては次回お話ししましょう。

2. Python 変数は「コンテナ」ではありません

以下はもう少し高度なものです。

変数の使い方を理解すると、変数をカップと同じようにデータを入れる「入れ物」として、そこに飲み物を注ぐのが代入、別の飲み物を注ぐのが再代入と考える人が多いかもしれません。

C++ のような言語では、この理解は問題ありません。このため、C++ では型を決定するために変数を使用する前に変数を「定義」する必要があり、プログラムは対応するメモリ空間を割り当てます。

残念ながら、Python ではこの理解は間違っています。

Python の変数は、データのコンテナーというよりは、データに付けられたラベルです。

変数はスペースを占有しません。スペースを占有するのはデータ自体です。再割り当てする場合は、ラベルを剥がして別のデータを貼り付けることと同じになります。

Python では、関数、クラス、モジュール、文字列「hello」も含めてすべてがオブジェクトであり、数字の 1、2、3 もすべてオブジェクトです。

例を挙げて説明すると、次のようになります。

a = 1
b = 2
c = 1
# 再次赋值
a = b

このコードでは、a と c は実際には同じオブジェクト (整数 1) を指します。b に値を代入すると、a は 2 を指すラベルになりますが、1 も c も影響を受けません。

回路図:

8249a916f88e1e48f2351cfe4392e844.jpeg

もう少し説得力のある検証:

a = 1
print('a', a, id(a))
b = 2
print('b', b, id(b))
c = 1
print('c', c, id(c))
# 再次赋值
a = b
print('a', a, id(a))

出力:

a 1 4301490544
b 2 4301490576
c 1 4301490544
a 2 4301490576

id() は、 オブジェクトのアドレスを取得するものと考えることができます。実際には、a と c は最初は同じアドレスであり、代入後も a と b は同じアドレスであることがわかります。

変数が再割り当てされるたびに、変数は元のアドレスとは関係のない新しいアドレスを指します。

この点に関する詳細な説明については、以前の記事を参照してください。

Python での変数の代入について他に知りたいことは何ですか? メッセージエリアでのディスカッションを歓迎します。


以下はビデオの時間です。皆さんのご注目、いいね、転送を歓迎します。


Crossinの新刊『Action on Code: 基礎ゼロから学ぶPYTHONプログラミング(CHATGPT編)』が発売になりました。

0018fa616b2ccb144fe88752ac4811be.jpeg

本書は、プログラミング経験がまったくないゼロベースの「初心者」でもPythonを学べるよう、分かりやすさを心がけています。内容は、環境構築の最も基本的な手順から始まり、徐々に一般的な実践的なアプリケーションに深く入っていきます。知識のポイントを解説しながら、対応するコード例も掲載しているので、学習・実践して理解を深めることができます。この本ではまた、プログラミング学習の補助として ChatGPT を革新的に使用しており、読者が AI 時代のプログラミング学習の新しいモードを模索するように導きます。

公式アカウントの読者や友人は、購入後にバックグラウンドで私に連絡し、読者交換グループに参加することができ、Crossin が付属の読書モードを開き、この本を読んでいるときのすべての質問に答えます。

リツイートいいねありがとうございます


_前の記事のおすすめ_

Python 変数の基本


有料の質の高いコース指導Q&Aサービスについて知りたい場合

クロシンのプログラミング教室: 666にご返信ください。

d4c2c84ab1d1b157bed77170a628e679.jpeg

おすすめ

転載: blog.csdn.net/qq_40523737/article/details/131778133