1.4.1 関数呼び出し
関数とは、名前のある計算を実行する文のかたまり。関数を定義することは、名前と命令文を定義すること。関数を定義することで、あとから関数を名前で呼び出すことができます。
関数呼び出しの一例:
print('Pythonの関数!')
この関数の名前は「print」カッコの中には引数をいれます。このprint関数を呼び出すことで、引数である「pythonの関数!」が表示されます。
一般の関数は引数を受け取り、結果を返します。この結果のことを戻り値と言います。
1.4.2 型変換関数
Python は値の型を他の型に変換する組み込み関数がある。int 関数は任意の値を受け取り、可能なときはその型を整数に変換する。
>>>int('10000')
10000
>>>int('Yes!')
ValueError: invalid literal for int() with base 10: 'Yes!'
また、int関数は浮動点小数も整数に変換するが、小数点以下切り捨てになる。
float 関数は整数や文字列を浮動小数点数に変換する。
>>>float(100)
100.0
>>>float('3.1415926')
3.1415926
str 関数は引数を文字列に変換する。
>>>str(100)
'100'
>>>str(3.14159)
'3.14159'
1.4.3 数学関数
Python は学校で習った数学関数を一つのモジュールで提供している。モジュールとは関連する関数類を一つにまとめたファイルである。モジュールは使う前にそれをインポートする必要がある。
>>>import math
>>>print(math)
<module 'math' (built-in)>
この文でmath と言う名前のモジュール・オブジェクト(module object)が生成される。モジュール・オブジェクトをprint 文で印字とすると、このモジュールの情報が得られる。
このモジュール・オブジェクトはこのモジュールで定義された関数や変数を沢山含んでいる。それらの関数の一つにアクセスするには、モジュール名と関数名をドット(終止符として知られている)で区切って特定しなければならない。この記法はドット表記(dot notation)と言う。
1.4.4 混合計算
プログラミングの強力な特徴の一つはこれらの構成要素を混合(composition)して使えることである。例えば、関数の引数には算術演算子を含む任意の表式が使える。
>>>import math
>>>degrees = 45
>>>x = math.sin(degrees / 360 * 2 * math.pi)
1.4.5 新規関数の追加
python が提供している関数だけではなく、ユーザーが新たな関数を作成することができます。これを関数定義という。関数定義(function definition)するにはその新しい関数に名前を付ける、関数が呼ばれときに実行される一連の文を定義することである。
def print_huh():
'ユーザー定義関数'
print('Nice to meet you.')
print('What do you do?')
print_huh() #関数を呼び出し
def は予約語で、これが関数定義であることを示す。関数名はprint_huhである。関数名の後の空の括弧はこの関数は何も引数を受け取らないことを示す。
関数の一行目はヘッダー(header)と言われ、残りはボディー(body)と言われる。ヘッダーはコロンで終わり、ボディーはインデント(字下げ)される。習慣として、このインデントの量は4である。ボディーは任意の数の文を含んで構わない。インデントはTabキーを使用すると便利です。
1.4.6 関数の定義と利用法
def print_huh():
'ユーザー定義関数'
print('Nice to meet you.')
print('What do you do?')
def repeat_huh():
'ユーザー定義関数'
print_huh() #関数を呼び出し
print_huh() #関数を呼び出し
repeat_huh() #関数を呼び出し
このプログラムは2つの関数を含んでいる。二つの関数が定義されており、それぞれ呼び出されるまで関数内部の命令文は実行されません。関数の定義は、呼び出し前にしなければなりません。
1.4.7 プログラム実行時の流れ
プログラムは先頭から一度に1つずつ、最後に向かって実行されます。
関数定義も同様ですが、定義された関数が呼び出されるまで内部の命令文は実行されません。
1.4.8 仮引数と実引数
関数の引数について、仮引数と実引数があります。仮引数とは、関数を定義しているところに書いている引数です。実引数とは、関数を呼び出す際に書いている引数です。
def print_huh(num1, num2): #num1, num2は仮引数
'関数定義'
print(f'{num1}回笑った!')
print(f'{num2}回泣いた。')
print_huh(7, 8) #関数呼び出し 7,8は実引数
#実際に関数に渡される引数が実引数
1.4.9 変数や仮引数の有効範囲
関数内部で変数を定義した場合、その変数はローカル変数で関数の内部でのみ有効です。
def print_huh(num1, num2):
''
mar = num1 + num2
print(f'{num1}回笑った!')
print(f'{num2}回泣いた。')
print(f'{mar}回のエモーショナル!')
print_huh(7, 8)
print(f'{mar}回の感情表現!')
7回笑った!
8回泣いた。
15回のエモーショナル!
Traceback (most recent call last):
File "c:\Users\Documents\python\test.py", line 10, in <module>
print(f'{mar}回の感情表現!')
NameError: name 'mar' is not defined. Did you mean: 'max'?
以上のように、print_huh関数内で定義したmar変数ですが、関数外でprint関数をつかって表示しようとするとmar変数は定義されておりませんとエラーになってしまいます。
1.4.10 関数の戻り値
組み込み関数や数学関数は結果を生成します。関数が生成した結果を利用するには変数に代入するか、式の一部として利用します。
import math
x = math.exp(2.0)
print(x)
y = math.cos(x)
print(y)
次に、球の体積を求める関数を定義します。関数で計算した値を利用するためには、関数内でreturn文を使って関数の呼び出し元に値を返す必要があります。
import math
def volume(radius):
values = 4 * math.pi * radius**3
return values
print(volume(3))
1.4.11 関数の利点
- 関数を定義し処理毎にまとめることで読みやすくデバックしやすくなる
- 関数化することで再利用でき繰り返しがなくなる。また、変更が生じたときは修正しやすくなる