python入門基礎チュートリアル06 python変数と関数


変数ベース
変数はプログラミング言語の重要な基本概念であり、各種の高級言語では変数でメモリ領域を表し、ある時点でこの領域に「a」が格納され、またある時点で「c」に格納される可能性がある.このブロックメモリの値がいつでも変化するからこそ、メモリ領域を表す記号を変数と呼ぶ.
変数の本質
Pythonプログラムも変数によってあるメモリのデータにアクセスするが、Pythonの変数の概念はC言語の変数とは少し異なり、まず変数の定義から違いを区別し、C言語で変数を定義する際には変数のデータ型を指定する必要があり、変数の初期化時には、また、等号左変数のデータ型に基づいて相応の付与を行う必要があります.そうしないと、データの変換操作が発生し、想像できないエラーが発生しますが、Pythonにはこの方面の要求はありません.Pythonで変数を指定する必要のないデータ型を定義し、各種のデータを等号左の変数に直接付与することができます.比較的自由です.例を挙げて説明します.
>>>x = 12
>>>print x12
>>>x = 13.09
>>>print x13.09
>>>x = "a1309b"
>>>print x'a1309b'

上記のプログラムから,付与時にPythonが変数xのデータ型に関心を持たないことが分かるが,C言語を学習した開発者は,C規定変数の型が一定サイズのデータメモリ領域を割り当てるためであり,Pythonが変数を定義する際に変数型を指定しない場合,長いデータに対してどのように格納できるかを知っている.次に、Pythonが変数のタイプを指定しなくても任意の長さのデータを「格納」できる理由について、小さなプログラムを見て説明します.
>>> x = 12
>>> type(x)
<type 'int'>
>>> x = '12'
>>> type(x)
<type 'str'>
>>> x = 12.03
>>> type(x)
<type 'float'>
>>> x = '12.0300203000404'
>>> type(x)
<type 'str'>

注意:type関数は、カッコ内の式の値を返すデータ型です.
上のコードxはそれぞれ整数12、文字列「12」、浮動小数点型データ12.03が付与されていますが、問題なく正しく実行され、非常に奇妙です.もしデータが大きいなら保存できますか(4、8バイトを超えています)?次のプログラムを見て、Pythonの変数とC言語の変数の違いを分析してみましょう.
>>> x = 12
>>> id(x)
10416516
>>> x = 13
>>> id(x)
10416504
>>> x = '12'
>>> id(x)
19428056
>>> y = '12'
>>> id(y)
19428056
>>> y = 13
>>> id(y)
10416504
>>> y = 12
>>> id(y)
10416516

注意:id関数は括弧の中のObjectのメモリ内のアドレスを返します.読者は自分でid出力値をメモリアドレスとして、等号の右の値をメモリ内のメモリ内容としてメモリ分布図を描いて分析してください.
10416516および10416516、10416504は複数回出現した.
>>> help(id)
Help on built-in function id in module __builtin__:id(...)    id(object) -> integer
    Return the identity of an object.  This is guaranteed to be unique among
    simultaneously existing objects.  (Hint: it's the object's memory address.)
>>>

xとyが12に割り当てられたときidの戻り値は同じであり、xとyが13に割り当てられたときidの戻り値も同じであり、xとyが12’に割り当てられたときidの戻り値も同じである.しかし、xまたはyが12、13、’12’に割り当てられた候補idの戻り値は異なる!このことからPythonは,等号右側のデータにメモリ空間を割り当て,異なる変数でこのデータを指すことができる.同じ値は、異なる変数によって同じメモリ領域を指すことによっても得ることができる.
>>> x = 12
>>> y = 13
>>> x = y
>>> x13
>>> id(x)
10416504
>>> id(y)10416504
>>>

このメモリ空間のデータを変数で変更できますか?いけません!
>>> x = 12
>>> id(x)
10416516
>>> x = 15
>>> id(x)
10416480

以上の結果から分かるように、12のメモリ領域の値は変更されず、データ15に1つのメモリ空間が割り当てられている.すなわち、変数が再割り当てされた後に別のメモリを指す場所であり、C言語変数との違いは、C言語の変数が常にある場所を指していることであり、C言語は変数によってメモリを指す値を変更することができる.Pythonの変数が変化するのは「指向」であり,Pythonの変数はC言語のポインタ概念に等価であると直接考えられる.そのためCとPythonには変数の概念がありますが、2つの言語の変数の「変」の意味は違います!