Python3入門(6)関数定義

lecture

Pythonの関数定義はfunctionとするのではなく、defとします。defとはdefinitionの事で、定義の意味があります。
処理内容はインデントを入れた後に記述します。インデントは重要で、4つの半角スペースを入れます。
関数名は英小文字を使用し、複数の単語を使う場合はアンダースコアで接続します。

def 関数名(引数1,引数2,引数3,…):
□□□□処理
□□□□return 戻り値

簡単な関数定義の例は以下の通りです。

関数定義のサンプル

def hello():
    print('Hello')
hello()

次の例はエラーになるので注意しましょう。Pythonでは関数定義を探してくれませんので、あくまで先に定義しておく必要があります。

hello()
def hello():
    print('Hello')

Pythonも関数定義で引数を使うことができます。
引数は正確には関数定義側の引数を「仮引数」(parameter)と呼び、関数呼び出し側の引数を「実引数」(argument)と呼びます。

引数の使い方

def menu(entree,drink,dessert):
    print(entree)
    print(drink)
    print(dessert)
menu('chicken','coke','cake')

キーワード指定をすると実引数の順番を変えてもエラーとならずに実行されます。
キーワードを使った引数の例

def menu(entree,drink,dessert):
    print(entree)
    print(drink)
    print(dessert)
menu(entree='chicken',dessert='cake',drink='coke')

デフォルト引数を用意しておくと実引数を指定しなくてもデフォルト値が使用されます。

デフォルト引数の例

def menu(entree='chicken',drink='coke',dessert='cake'):
    print(entree)
    print(drink)
    print(dessert)
menu()

デフォルト引数以外の値を使いたい場合はそれぞれの値を指定します。
キーワードを使えばデフォルト値のものとそうでないものを区別しやすくなります。

第1引数と第3引数のみ引数の値を変更する例

def menu(entree='chicken',drink='coke',dessert='cake'):
    print(entree)
    print(drink)
    print(dessert)
menu(entree='beef',dessert='ice')

デフォルト引数の値に参照渡しになるもの、例えばリストなどを指定すると当然参照渡しの結果になります。
これはバグに繋がりやすいので、できるだけリストなどを指定しないようにすると良いでしょう。

参照渡しの引数を使った例
第1引数の値を第2引数のリストに追加しています。

def test(x,l=[]):
    l.append(x)
    return l
r = test(10)
print(r)
r = test(10)
print(r)

結果
[10]
[10, 10]

スポンサーリンク

ラムダ式

Pythonでの無名関数をlambda(ラムダ式)といいます。何か特殊なことを行う関数というよりも、記述を簡略化するのに役立つものです。
lambda式の書き方は以下のようになります。関数名が無い事と、コロンの後に改行せずに処理を記述するのが特徴です。

lambda 引数1,引数2,引数3,…:処理

通常の関数でリスト要素の頭文字を大文字にするサンプル

country = ['Japan','China','Koria','america']
def change_words(words,func):
    for word in words:
        print(func(word))
def sample_func(word):
    return word.capitalize()
change_words(country,sample_func)

上記のサンプルをlambda式で記述した例
結果は上のサンプルと同じになります。

country = ['Japan','China','Koria','america']
def change_words(words,func):
    for word in words:
        print(func(word))
sample_func = lambda word: word.capitalize()
change_words(country,sample_func)
タイトルとURLをコピーしました