python入門講座 | 変数を使いこなそう2(変数の更新方法 — increment/decrementなど)[第13回]

アラサーOLのためのpython入門講座
便利な書き方を覚えるとPythonプログラミングの上達が速くなります!

Ciao!みなさんこんにちは!このブログでは主に
(1)pythonデータ解析,
(2)DTM音楽作成,
(3)お料理,
(4)博士転職
の4つのトピックについて発信しています。

今回は「アラサーOLのためのpython入門講座」です!
この講座では、プログラミング初心者アラサーOLのMi坊さんに、pythonを学習する上でのアドバイスを行います!
パソコンもプログラミングも初心者だけど、プログラミングができるようになりたい!」という方のためにstep-by-stepで解説していきます。

今日はPythonの変数について解説します!
変数を使うことにより、ある値を一度定義するだけでプログラムの中で何度もその値を参照することができます。
変数が保持する値をプログラムの途中で更新することができます。
変数の更新方法を覚えましょう!

Kaiko
Kaiko

この記事はこんな人におすすめ

  • 初心者だけどpythonを始めた!
  • pythonの基本的な使い方を知りたい!
  • 独学で学んだpythonの知識を整理したい!

Abstract | 変数は更新して使うこともある

変数は最初に値を定義してコードの中で参照して使うだけでなく、コードのなかで更新して使うこともあります。
コマンドライン引数の値を反映して更新したり、ある関数で行った処理結果に応じて値を変えたりします。for文の中で数を数えるカウンタ変数などは、ループのたびに数値を加算して更新していきます。
変数の更新ではincrement, decrementなどの便利な書き方が存在します。
便利な方法をどんどん覚えてPythonプログラミングを習得しましょう!



Method | 変数の更新方法

変数に格納されている値はコードの途中で変更することができます。
一度定義しておいた変数に別の値を代入することで、もとの値が上書きされます。
単純に、

x = 1

と変数xに1を代入して定義しておいて、その次に

x = x + 1

とすれば変数xの値は2に変わります。

便利な表現方法 | x += 1など

ある変数に別の数値を足したり掛けたり、四則演算をするときには

x = x + 1

などと書くよりも短く書けて便利な表現があります。
以下で一つづつ見ていきましょう。

足し算(インクリメント; increment)| x += 1

変数xに1足すという処理は

x += 1

と書くことができます。
このようにある変数に定数を足す処理はインクリメント(increment)と呼ばれることがあります。

このような表現はfor文(そのうち解説します)などのループ処理で使うことがあります。例えば以下のような感じです。

list_animal = ['cat', 'dog', 'mouse', 'deer', 'pigeon']
i = 0
for animal_i in list_animal:
    print(i, animal_i)
    i += 1

はじめにcat, dog, …, pigeonという要素を持つリスト型(そのうち解説します)の変数を定義します。
次にfor文でループ処理をしてこれらの要素を一つずつ表示していきます。
そのときに何回目のループ処理をしているのかをiという変数(カウンタと呼ばれる)に格納しておいて同時に表示しています。
for文の最後のところで「i += 1」を使ってカウンタiに1足しています。

上ではベタ打ちの数値を足しましたが、変数を足すこともできます。

i = 1
delta_i = 3
i += delta_i

のようにすれば、iは1から4に増えます。

引き算(ディクリメント; decrement)| x -= 1

変数xから1引くという処理は

x -= 1

と書くことができます。
このように変数から定数を差し引く処理をディクリメント(decrement)と呼ぶことがあります。
ディクリメントもfor文でカウントダウンするときなどに使われます。

変数を差し引くこともできます。

i = 10
delta_i = 3
i -= delta_i

とすれば、iは10から7に減ります。

掛け算 | x *= 2

変数xに2掛ける処理は

x *= 2

と書くことができます。
変数を掛けることもできて、

x = 2
y = 3
x *= y

とすれば、xは2から6に変わります。

割り算 | x /= 2

変数xを2で割る処理は

x /= 2

と書くことができます。
変数で割ることもできます。

x = 6
y = 2
x /= y

とすれば、xは6から2に変わります。



Result | 実際にやってみよう

実際に手を動かしてみましょう!
今回もJupyter Notebookでコーディングしましょう!

準備 | python notebookの新規作成

まずはpython notebookを用意しましょう。
いつものpython_practiceのディレクトリに「practice_variable_update」という名前のpython notebookを作成してください。
ターミナルを立ち上げて~/python_practiceに移動、jupyter notebookを起動し、ブラウザから新規→Python3でpython notebookを開いて、ファイル→リネームでファイル名を決定します。
もしやり方がわからなければ、前回記事「python入門講座 | 変数を使いこなそう1(変数の定義方法と基本ルール)」や過去記事「python入門講座|pythonを使ってみよう2(Jupyter Notebookを使う方法)」で詳しく解説しているので、これらを見ながらやってみてください。

変数の更新の例

上記で取り上げた変数の更新の例を実際にやってみましょう。
まずは最初のセルをMarkdownセルにして

# 変数の更新

と書いておきましょう。後で見返したときにわかりやすくなります。
Markdownセルやコードセルなどの用語やこれらの使い方は過去記事「python入門講座|pythonを使ってみよう2(Jupyter Notebookを使う方法)」を参照してください。

次のコードセルで以下を実行してみましょう。

# define a variable
x = 1
print(x) # This shows 1

# change the variable
x = x + 1
print(x) # This shows 2

1と2が出力されます。

インクリメントの練習

次にincrementを練習してみましょう。わかりやすいようにMarkdownセルに「# Incrementの練習」などと書いてから以下を実行してみてください。

# define a variable
x = 1
print(x) # This shows 1

# increment by 1
x += 1
print(x) # This shows 2

最初に定義した数値の1と更新後の数値の2が表示されます。

for文と組み合わせた例

次にfor文と組み合わせた例もやってみましょう。Markdownセルに「## for文と組み合わせた例」などと書いてから以下を実行してみましょう。

# define a list
list_animal = ['cat', 'dog', 'mouse', 'deer', 'pigeon']
# define a counter
i = 0
# loop to show the items
for animal_i in list_animal:
    # print
    print(i, animal_i)
    # increment
    i += 1

「0 cat, 1 dog, …, 4 pigeon」と表示されます。
コードの解説はMethodの章でしているのでそちらも参照してください。

変数でincrementする例

変数でincrementする例もやってみましょう。Markdownセルに「## 変数でincrementする例」などと書いてから以下を実行してみましょう。

# define counter and increment amount
i = 1
delta_i = 3
# print i and delta_i
print(i, delta_i)
# increment by delta_i
i += delta_i
# print to confirm
print(i)

最初に定義したiとdelta_iの値が「1 3」、更新後のiの値が「4」と表示されます。

decrementの練習

decrementの練習をしてみましょう。Markdownセルに「# decrementの練習」と記載してから以下を実行しましょう。

# define a variable
x = 2
print(x) # This shows 2

# manually decrement
x = x - 1
print(x) # This shows 1

# decrement by 1
x -= 1
print(x) # This shows 0

2, 1, 0と表示されます。

変数でdecrementする例

次に変数を使ってdecrementしてみましょう。Markdownセルに「## 変数でdecrementする例」と記載してから以下を実行しましょう。

# define counter and decrement amount
i = 10
delta_i = 3
# print i and delta_i
print(i, delta_i)
# decrement by delta_i
i -= delta_i
# print to confirm
print(i)

「10 3」、「7」と表示されます。

掛け算の練習

掛け算の練習です。Markdownセルに「# 掛け算の練習」と記載してから以下を実行しましょう。

# define a variable
x = 2
print(x) # This shows 2

# manually multiplied
x = x * 2
print(x) # This shows 4

# multiplied by 3
x *= 3
print(x) # This shows 12

2, 4, 12と表示されます。

変数を掛ける例

変数を掛ける例もやってみましょう。Markdownセルに「# 掛け算の練習」と記載してから以下を実行しましょう。

# define x and y
x = 2
y = 3
print(x, y)
# multiply
x *= y
print(x)

「2 3」「6」と表示されます。

割り算の練習

割り算の練習です。Markdownセルに「# 割り算の練習」と記載してから以下を実行しましょう。

# define a variable
x = 12
print(x) # This shows 12

# manually divided
x = x / 2
print(x) # This shows 6

# divided by 3
x /= 3
print(x) # This shows 2

12, 6.0, 2.0と表示されます。割り算をするとint型(整数値)からfloat型(浮動小数点値)に変更されるので、6と2には小数点がついています。

変数で割る例

変数を使って割り算してみましょう。Markdownセルに「# 変数で割る例」と記載してから以下を実行しましょう。

# define x and y
x = 6
y = 3
print(x, y)
# division
x /= y
print(x)

「6 3」、「2.0」と表示されます。



発展編 | 変数の更新とメモリの関係

発展編です。変数とメモリの関係についてお話していきます。
メモリとはパソコン上の一時記憶領域です。
初心者講座を逸脱した内容なので、理解できなくても構いません。「ちょっと何言ってるかわからん」と思ったら、この章はスキップして練習問題に行ってください!

Pythonで変数を定義すると、その変数はメモリ上のどこかの領域に確保されます。
変数を参照するときには、パソコンの中ではメモリ上のその変数の位置(メモリアドレスと呼ばれる住所のようなもの)を見に行くことで、値が取得されています。
ここでは、変数の更新によってどのようにメモリアドレスが変化するのかを確かめてみましょう。

メモリアドレスの取得 | id()

Pythonではメモリアドレスはid()という関数で取得できます。

# define a variable
x = 1
x_id_1 = id(x) # get memory address
print('address of x_1:', x_id_1)

を実行すると

address of x_1: 140469007948080

のように表示されます。この数字はメモリ上の住所を示しており、実行環境によっても変わりますし、実行するたびに変わります。

変数の更新によるメモリアドレス変更

次に変数を更新するとメモリアドレスがどうなるか見てみましょう。

# change x and see memory address
x += 1
x_id_2 = id(x) # get memory address
print('address of x_2:', id(x_id_2))
print('same as x_1?:', x_id_1 == x_id_2)

を実行すると

address of x_2: 140469074038672
same as x_1?: False

と表示されます。
先程のxを1 incrementしたところ、メモリアドレスx_id_2が先程のx_id_1とは異なるものになりました。
このように、同じ変数であっても値を更新するとメモリアドレスが変わります。
別の言い方をすると、別のメモリ領域が確保され、そこに新しいオブジェクトが作成されたということです。
ちなみに、リスト型など配列の類の変数の場合、要素を更新しただけではメモリアドレスは変わりません。配列そのものを更新するとメモリアドレスが変わります。

同じ値の変数のメモリアドレス

異なる変数であっても、同じ値であればメモリアドレスは同一となります。

x = 1
print('value and address of x:', x, id(x))
y = 1
print('value and address of y:', y, id(y))
print('same address?: ', id(x) == id(y))

を実行すると

value and address of x: 1 140469007948080
value and address of y: 1 140469007948080
same address?:  True

と表示されます。変数は別のものですが、メモリアドレスは同一です。この場合は、変数xを参照するときもyを参照するときも、パソコンは同じメモリアドレスを見に行きます。

ここでyの値を変えるとメモリアドレスは変化します。

x = 1
print('value and address of x:', x, id(x))
y = 2
print('value and address of y:', y, id(y))
print('same address?: ', id(x) == id(y))

を実行すると

value and address of x: 1 140469007948080
value and address of y: 2 140469007948112
same address?:  False

となり、yのメモリアドレスが変わったことがわかります。

変数の代入によるメモリアドレスの変化

変数xとyをそれぞれに定義し、その後でx=yとしてxを更新してみましょう。
このとき、xとyには最初は別のメモリアドレスが割り当てられますが、この更新によって同一のメモリアドレスとなります。
さらにyの値を変更すると、xのメモリアドレスはそのままで、yのメモリアドレスが変化します。
上で見てきた挙動と整合していますね。

実際にやってみましょう。

# define x, y
x = 1
y = 2
print('value of x and y:', x, y)
print('address of x and y:', id(x), id(y), id(x) == id(y))

# override x with y
x = y
print('value of x and y:', x, y)
print('address of x and y:', id(x), id(y), id(x) == id(y))

# change y
y = 3
print('value of x and y:', x, y)
print('address of x and y:', id(x), id(y), id(x) == id(y))

を実行すると

value of x and y: 1 2
address of x and y: 140469007948080 140469007948112 False
value of x and y: 2 2
address of x and y: 140469007948112 140469007948112 True
value of x and y: 2 3
address of x and y: 140469007948112 140469007948144 False

となります。最初はxとyは別のメモリアドレスですが、x=yとすることでxのメモリアドレスがyと同一になります。さらにyの値を更新するとyのメモリアドレスが変化します。



練習問題

練習問題をやってみましょう!
以下の処理をするコードを書いてみてください!

  1. 変数my_hobbyに「programming」を代入し、変数my_hobbyをprint関数で出力してください。
  2. 変数my_hobbyを「python」で上書きし、変数my_hobbyをprint関数で出力してください。
  3. 変数nに12を代入し、変数nをprint関数で出力してください。
  4. 変数nに4を掛けて上書きし、print関数で出力してください。

練習問題の回答例

できたら回答例を確認しましょう!下の画面をスクロールすると回答例が見られます!
今回の記事で出てきた他のコードも載っているので参考にしてください!

練習問題おつかれさまでした!
今日はここまでです。Python Notebookを終了しておきましょう。もしPython Notebookを終了方法がわからなければ過去記事「python入門講座|pythonを使ってみよう2(Jupyter Notebookを使う方法)」の「Python Notebookの起動・終了方法」の章を参照してください!



Conclusion | まとめ

最後までご覧いただきありがとうございました!
Pythonの変数の更新方法を解説しました!

変数は最初に値を定義して使うだけでなく、途中で別の値を代入してつかったり、for文の中でカウンターとして加算していく場合など、コードの途中で更新するということが多々あります。
変数の扱い方をしっかり身につけて正確でわかりやすいコードを速く掛けるようになりましょう!

以上「python入門講座 | 変数を使いこなそう2(変数の更新方法 — increment/decrementなど)」でした!
またお会いしましょう!Ciao!



References | 参考

参考教科書

以下の教科書を参考にして進めています!より詳しく学びたい方は購入して読んでください!

コメント

タイトルとURLをコピーしました