pythonで作ってみよう!!

pythonを楽しく学ぶために、おみくじ、占い、ジャンケンなど、実際に作りながら勉強してみます!

第4章 データ処理の基本

4.1 演算子

データを加工するための方法に演算子による演算があります。もっとも身近なものは四則演算のような算術二項演算子です。

print(1 + 2)
3

4.1(1) 演算子の種類

演算子には2つの値を使って処理をするものと、1つの値を使って処理をするものがあります。
演算子ごとにどのような書き方をするかは決まっていますが、概ね以下の2通りに分かれます。

a. 2つの値を使うもの
1 + 2
b. 1つの値を使うもの
-x

4.1(2) 演算子の動作

演算子は処理されると(その演算子が処理される番になると)、演算子ごとに決まった動作をして、その結果を返します。演算子と使った値(オペランドといいます)の部分が結果に置き換わると考えてもよいでしょう。
f:id:inato_gen:20190403083249g:plain

累積代入では
変数 ○= 値
#○は二項演算子
が、
変数 = 変数 ○ 値
と同じでした。このときの処理順序は以下の以下のようになります。
  1. 右辺の変数がその内容に展開されます。
  2. 右辺の演算が行われます(その結果に読み替えられます)。
  3. 左辺の変数に結果が代入され、変数の内容が上書きされます。
f:id:inato_gen:20190412203810g:plain

4.2 関数

関数とは、いくつかのパラメータを取り*1、関数ごとに決まった処理をするものです。パラメータを使って処理をするところは演算子と似ている部分がありますが、結果を返す他にさまざまな動作をするものがあります。
代表的な例に画面に文字を表示するprint関数があります。

print("Hello world!")
Hello world!

4.2(1) 関数の呼び出し

関数は関数名に続いて丸カッコ「( )」を書き、中にパラメータを記述します。パラメータ(引数ともいいます)が複数ある場合はカンマ「,」で区切ります。
関数が値を返すとき、演算子と同様に関数呼び出し部分がその結果に置き換わるものと考えることができます。

# xのy乗を返す関数pow
z = pow(5, 3)
# z ... 125

これらは評価される順に行われます。実行される順序(優先度)については別で解説します。
f:id:inato_gen:20190403213844g:plain

4.2(2) パラメータの指定

パラメータを指定する方法には2つあります。

a. 位置引数による指定

前述のpow関数では1つめのパラメータがべき乗の底、2つめの引数が指数となります。このようにパラメータを書いた順序で紐付ける方法を位置引数といいます。

print(pow(3, 4))
81
b. 名前付き引数による指定

関数のパラメータにはそれぞれ名前がつけられているものがあります。

print(3, 4, sep = "/")
3/4

パラメータには位置でしか指定できないもの、名前でしか指定できないもの、どちらでも指定できるものがあります。

4.2(3) 外部モジュールの利用

pythonでは外部モジュールを読み込むことで利用できる関数を拡張することができます(外部モジュールを読み込まないと使えない関数があるとも言えます)。
外部モジュールには、pythonと一緒にインストールされる標準ライブラリのものと、それ以外のものがあります。
標準ライブラリ以外のモジュールは別途pipコマンドなどでインストールが必要です。
(必要であればインストール手順を実行した後、)pythonで外部モジュールを有効にするにはimport文を実行します。

import モジュール名

これによって外部モジュールに含まれる関数が利用可能になり、次のように実行します。

モジュール名.関数名(...)

例えば、2つの値の最大公約数を求めるには以下のように記述します。

import math
print(math.gcd(117, 208))
13

4.3 クラスメソッド/インスタンスメソッド

詳しくはクラスの項で説明しますが、クラスメソッド、インスタンスメソッドと呼ばれる形式の関数もあります。
クラス、オブジェクトが持つ関数のことを特にメソッドといいます(繰り返しますが詳細は別途)。

4.3(1) クラスメソッド

今の時点では、そういう名前の関数がある、程度の理解で構いません。

クラス名.メソッド名(...)

例えば、16進数形式の文字列を数値に変換するには以下のように記述します。

print(float.fromhex("0xff"))
255.0

4.3(2) インスタンスメソッド

クラスメソッドと似た書き方をしますが、クラスメソッドがクラス名(型)を記述するのに対して、インスタンスメソッドでは実際の値(オブジェクト)を記述します。

オブジェクト.メソッド名(...)

例えば、変数の値を書式化するには以下のように記述します。

jp = "リンゴ"
en = "apple"
print("{}は英語で{}".format(jp, en))
リンゴは英語でapple

インスタンスメソッドでは、オブジェクトのところには、変数またはリテラルが記述できます。もちろん、オブジェクトの内容によって結果が変わります。

*1:パラメータを取らないものもあります