概要
「Head First Python 第2版」を進めていった中で考えたことの記録です。
Head First Python 第2版 ―頭とからだで覚えるPythonの基本
- 作者:Paul Barry
- 発売日: 2018/03/24
- メディア: 単行本(ソフトカバー)
Pythonにおける関数
Pythonにおける関数の基本構成
def a_descriptive_name(optional_arguments): """ドキュメンテーション文字列""" # ここに関数のコードが入る。 # ここに関数のコードが入る。 # ここに関数のコードが入る。 return optional_value
- Pythonにおける関数は、コードを再利用する最も基本的な手段である
- 関数の基本的な構成
def
キーワードから始まる行を先頭に記述する- 処理の内容を、
def
キーワードのある行の次の行以降に字下げして記入する """
(ダブルクォーテーション3つ)で囲った文字列は「ドキュメンテーション文字列(docstring)」というreturn
文により、1つの値を返すことができるreturn
文がない場合、関数の戻り値はNone
となる
def
行の構成- 関数の名前
()
で囲った引数群- 最後にコロン
:
を忘れないように
Pythonにおける関数の呼び出し方
def search4vowels(): # ...略 # 関数呼び出し search4vowels()
- 関数を呼び出すには、関数名と関数が取る引数の値を指定すればよい
- 引数を持たない関数を呼び出す場合、引数の記載は
()
とする
- 引数を持たない関数を呼び出す場合、引数の記載は
- IDLEにおいては、関数を含むモジュールを実行すると、以下の動作をする
- シェルを起動する(新たに起動、または既存のシェルを再起動)
- 起動されたシェルに、モジュールに含まれる関数をインポートする
引数とは
- Pythonにおける関数は、0個以上の任意の数の引数を取ることができる
- 関数が引数を取るように定義するには、
def
行の()
内に引数の名前を入力すればよい- 当該引数(仮引数)は、関数ブロック内で変数として用いることができる
- 関数呼び出し時には、関数定義の際に定義した引数(仮引数)と同じ数の引数(実引数)を渡さなければならない
- 仮引数の数と実引数の数が一致しない場合、
TypeError
がスローされる
- 仮引数の数と実引数の数が一致しない場合、
def search4vowels(word): # ...略... vowels = set('aeiou') found = vowels.intersection(set(word)) # ...略...
↑引数word
を取る関数search4vowels()
を定義し、関数ブロック内でword
を変数として用いている例。
# 仮引数の数は1つである def search4vowels(word): """入力した単語内の母音を表示する。""" vowels = set('aeiou') found = vowels.intersection(set(word)) for vowel in found: print(vowel) # 仮引数の数と実引数の数が一致する関数呼び出し search4vowels('hitch-hiker') # => e # => i # 関数呼び出し時に実引数の数が足りない場合、TypeErrorとなる search4vowels() # TypeError: search4vowels() missing 1 required positional argument: 'word' # 関数呼び出し時に実引数の数が多すぎる場合、TypeErrorとなる search4vowels('hitch-hiker', 'Sky') # TypeError: search4vowels() takes 1 positional argument but 2 were given
関数は結果を返すことができる
- Pythonにおいて、関数に結果を返させるためには
return
文を用いる return
文が実行されることにより、以下の事態が発生する- 関数の実行が終了される
return
文に与えられた値が呼び出し側のコードに返される
- 関数の戻り値は、常に一つのオブジェクトである
- 複数のオブジェクトを返したい場合は、リストなどの構造化データを用いて1つのオブジェクトにまとめる
return
文が実行されずに関数の実行が終了された場合、関数の戻り値はNone
となる
# return文がないため、戻り値は常にNoneである def search4vowels(word): """入力した単語内の母音を表示する。""" vowels = set('aeiou') found = vowels.intersection(set(word)) for vowel in found: print(vowel) print(search4vowels('hello')) # => o # search4vowels()内でprint関数が実行されたことによる副作用 # => e # search4vowels()内でprint関数が実行されたことによる副作用 # => None # search4vowels()の戻り値
↑値を返さない関数の実行例。
def search4vowels(word): """母音が見つかったかどうかによってブール値を返す。""" vowels = set('aeiou') found = vowels.intersection(set(word)) return bool(found) print(search4vowels('hitch-hiker')) # => True print(search4vowels('galaxy')) # => True print(search4vowels('Sky')) # => False
↑ブール値を返す関数の実行例。
def search4vowels(word): """指定された単語内の母音を返す。""" vowels = set('aeiou') return vowels.intersection(set(word)) print(search4vowels('hitch-hiker')) # => {'e', 'i'} print(search4vowels('galaxy')) # => {'a'} print(search4vowels('Sky')) # => set()
↑集合を返す関数の実行例。空の集合はset()
と表示される。