nanana、データ型を学ぶ(Python学習記録-1日目-)

■まえおき

下記の記事でPython学び直してやるぞーと宣言しました。 nanana-dot.hatenablog.com

インプットしても、自分の言葉でアウトプットしなければ、
いつになっても自分で使いこなすことはできないだろうと思い、始めた試みです。

■今日の学び

  • オブジェクトの基本要素「リテラル」とリテラルを分類するデータ型(組み込み型).
  • データ型があるところに「メソッド」あり
  • 特定のオブジェクトにつける名札としての「変数」.

■データ型とメソッド

Pythonでプログラミングをはじめるに、あたりそもそもソースコードってどんな要素から構成されているんだろうという話からはじめます。

ここではソースコードは、

から成り立っているとします。
この中でも特に重要なのが、「リテラル」です。 リテラルは簡単に言ってしまえば、ソースコードに書かれる生の値です。 数値なら「2」や「3.5」がリテラルですし、文字なら「Hello」もリテラルです。 それぞれの値ごとにリテラルには種類があり、最終的にはリテラルを扱う「データ型(組み込み型)」という考え方に行き着きます。 すべてにリテラルには、対応する「データ型」が存在するということがミソかな。 ソースコードで扱う要素はすべて素性が分かっているから、ソースコードとして機能するのです。

たくさんあるリテラルを分類し、データ型にまとめたという気持ちがわかるともうそこはオブジェクト指向の入り口なのかなと。

下に代表的なデータ型と対応するリテラルをまとめてみました。

データ型 扱うリテラル リテラルの例
数値型(int型) 整数リテラル 3,200,0x10
数値型(float型) 浮動点小数リテラル 2.71828
数値型(complex型) 複素数リテラル 2+3j
文字列型(str型) 文字列リテラル 'abc' , 'こんにちは'
ブール型(bool型) 真偽リテラル True, False のみ
バイト型(bytes型) バイトリテラル b'abc'
リスト型(list型) リストリテラル [1,2,3], ['a', 'b', 'c']
タプル型(tuple型) タプルリテラル (1,2,3), ('a', 'b', 'c')
集合型(set型) 集合リテラル {1,2,3}
辞書型(dict型) 辞書リテラル {'spam':'スパム', 'ham':'ハム'}

そしてこれらデータ型というのは、
ソースコード中でもよく登場し、データを操作が多く行われます。
そのため、これらデータ型を操作するための「メソッド」と呼ばれる、
操作があらかじめPythonの中には用意されています。
このメソッドがPythonを「シンプル」で「簡単」たる言語にしている理由かと思います。

メソッドはたくさんあるのですが、詳しくはここをみてみると、こんなに用意されているのかとなります。
個人的には、文字操作多いなと感じました。 組み込み関数 — Python 3.7.3 ドキュメント

■変数は「名札タグ」と考える

いままで変数ってなにかの入れ物だと思っていました。 ただ今回学習して、変数は「名札タグ」のようなものだと考えを改めました。

リテラルはコンピューター上のメモリに一時的に記録されます。 こうして操作する対象になったデータを「オブジェクト」と呼び、 オブジェクトが存在するメモリアドレスを調べる関数 id() で調べられます。 下のような簡単な実験で、
あくまでもオブジェクトの存在があって、それを変数で「参照」しているだけなのだとわかります。

#リテラルをメモリに一時保存.変数xで「参照」.
>>>x = 100
>>> id(x)                 
>>> 4454805664 
#上でつくったリテラル「100」を変数yでも「参照」
>>> y = x  
>>> id(y)
#xと同じメモリアドレスとなる
>>> 4454805664  

#一方で別のリテラルをつくってyで参照
>>> y = 200  
>>> id(y)
#リテラルが異なるのでメモリアドレスも異なる
>>> 4454806304  

こうすると少しだけオブジェクトってやつが分かった気になるもんです。

明日は「プログラムの制御」に関してです。


本日の学習時間:2時間
累計の学習時間:2時間