Python Python 入門 プログラミング

【python 入門】関数の使い方をマスターする!

python 入門 関数

 

pythonの学習で変数、配列、条件分岐に繰り返しと次は関数の出番です。

関数はプログラムを再利用し、コードを見やすく、使いやすくすることができます。

初学者でもわかるように、使い方を丁寧に紹介していきます。

 

本記事はこんな方におすすめです。

hituji

python学習し始めで、関数の使い方を知りたい

使い方をマスターしたい

 

本記事の内容

  • 関数について >>
  • 関数の書き方、使い方 >>
  • 引数の初期値を設定する >>
  • 引数の型を固定にする >>
  • コメントの付け方 >>

 

python入門 基礎まとめ」も参考にしてください。

>> python 入門 基礎まとめ

 

サンプルコード

 

スポンサーリンク

関数について

まず関数について紹介します。

関数は、データを渡すと処理をするものです。

 

料理で例えてみましょう。逆にわかりにくかったらすみません。

データ:具材
関数:フライパン
処理:卵を焼く
結果:目玉焼き

 

まぁ、あくまでイメージなので、なんとなく伝われば良いです。

 

データや結果にはそれぞれ言い方があります。

ポイント

データ:引数

結果:返り値

 

関数の種類

関数には、誰かが作ってくれたもの自分で作るものがあります。

誰かが作ってくれたものの代表が組み込み関数です。

公式ドキュメントを参考にしてください。

>> 公式ドキュメント

 

例えば、printとかがありますね、何かしらデータを与えると、出力します。

自分で作るものはユーザー定義関数です。

今回はもちろん、ユーザー定義関数を作っていきます。

 

メリット

関数を使うことのメリットです。

メリット

コードの再利用ができる

コードの量が減る

コーディングの速度Up

コードの読みやすさ(可読性)がよくなる

他の人に使ってもらえる

などです。デメリットはありません。

 

関数の書き方、使い方

関数は次のように書きます。

関数の書き方

def 関数名(引数1, 引数2, ..., 引数n):

    処理

    return 返り値1, 返り値2, ..., 返り値n

 

引数や返り値は何個あっても良いですし、ゼロでも良いです。

引数がゼロ、返り値もゼロそんな関数もあります。

 

使い方は、次のようになります。

関数の使い方

変数名1, 変数名2,..., 変数名n =  関数名(引数1, 引数2, ..., 引数n):

返り値の数の分だけ、変数が必要になります。

 

関数名の付け方

使う前に、関数名の付け方についてポイントがあります。

pythonのコードではPEP8というコーディングルールがあります。

 

これによると、関数の付け方は「関数の名前は小文字のみにすべきです。また、読みやすくするために、必要に応じて単語をアンダースコアで区切るべきです」とあります。

>> 関数のルール

 

例えば、「hoge_foo_bar」みたいな付け方です。

もちろん、関数名をみただけでどんな処理かわかるものにしましょう。

その点では、上記の例はNGです。

 

これはプログラム言語によって、ルールが違っており、例えルール通りなっていないからといって、完全にNGというわけではないので、注意しましょう。

PEP8でも「一貫性にこだわりすぎるのは、狭い心の現れである」とあります。

 

では実際にいくつかの例を見ていきます。

 

引数なし、返り値なしの関数

日時を表示する関数を使います。

日時はdatetimeで取得しています。

import datetime

# 日付、時間を表示する関数
def show_now():
    print(datetime.datetime.now())
    
#実行
show_now()
2021-01-20 22:57:20.345582

 

これで、今度からshow_now()とするだけで、今日の日時がわかります。

今回は、関数での処理が1行のみですが、処理が数十行でも1行ですむということです。

 

引数あり、返り値ありの関数

次は、円の面積を求める関数を作ってみます。

自分で作れそうな方は、コード見ずに作ってみてください。

 

import math

# 円の面積を計算する
def calc_circle_area(r):
    return r*r*math.pi

# 実行 result(変数)に返り値を受け取る
result = calc_circle_area(5)

#計算結果を表示
print(result)
78.53981633974483

 

円周率は自分で、3.14159...と入力してもいいですが、math.piでOKです。

 

引数を複数にしたり、組み合わせは色々あるので、試してください。

 

引数の初期値を設定する

引数には初期値を設定することができます。

その時は関数定義で引数=初期値とします。

例えば、引数が3つで3番目だけ、初期値を設定する場合は次のようになります。

初期値ありの引数

def 関数名(引数1, 引数2, 引数3=初期値):

    処理

    return 返り値1

 

これは関数を動かすときに、引数が2つでも3つでも動きます。

2つの時は、初期値が使われます。

実際に見てみましょう。BMIの計算関数を作ってみます。

引数1: 身長 、引数2: 体重、 引数3: 身長がcmかどうかとします。

#関数定義
def calc_bmi(tall, weight, cm=True):
    # tallがcmかどうか判断
    if cm:
        tall = tall/100
    bmi = weight/(tall*tall)
    return bmi

# 3つ目引数なし、cmで入れる
bmi = calc_bmi(170, 70)
print(bmi)

# 3つ目引数あっても良い、cmで入れる
bmi = calc_bmi(170, 70, True)
print(bmi)

# 3つ目引数あり、mで入れる
bmi = calc_bmi(1.7, 70, False)
print(bmi)
24.221453287197235
24.221453287197235
24.221453287197235

 

3つ目の引数を入れたり、入れなかったりしてますが、それぞれ計算はあっています。

 

エラーが出るパターン

初期値を使う場合は、その引数は、右に置きます。

間違っても、初期値がない引数の前に持ってきてはいけません。

例えば、次のようにした場合です。

# エラーが出るパターン
def calc_bmi(cm=True, tall, weight):
    # tallがcmかどうか判断
    if cm:
        tall = tall/100
    bmi = weight/(tall*tall)
    return bmi
SyntaxError: non-default argument follows default argument

と怒られてしまいます。

 

引数名を使ってデータを与える

ふと見返したときに、引数のどの値がどのデータ?とわからなくなります。

その時は、引数名=データとすることができます。

 

次のような感じです。

bmi = calc_bmi(tall=1.7, weight=70, cm=False)
print(bmi)

これで、どのデータがどんな引数かわかります。

 

引数名を使う場合は、順番はバラバラでもOKです。

bmi = calc_bmi(cm=False, tall=1.7, weight=70)
print(bmi)

 

また、引数が多数ある場合は、引数は次のように改行で折っていくと良いでしょう。

bmi = calc_bmi(cm=False, 
               tall=1.7, 
               weight=70)
print(bmi)

 

ここからは、ちょっとおまけパーツになります。

引数の型を固定にする

pythonでは引数の型は決めていません。

他の言語だとこれは珍しいです。

しかし、ライブラリなど皆さんに配って使う前提のものは、型が決まってないと不具合が出やすくなってしまいます。

ですので、次のように型名を決めておくことができます。

>> python公式ドキュメント 型のヒントのサポート

 

引数の型を決める

def 関数名(引数1: 型) -> 返り値の型:

    処理

    return 返り値1

 

例えば、次のように引数と返り値両方をstr型にしてみます。

def greeting(name: str) -> str:
    return 'Hello ' + name

 

これを使ってみましょう。

引数に名前を入れてみます。

print(greeting("hituji"))
Hello hituji

 

これは問題ありませんね。

例えば、この関数を使っているユーザーが間違って、数値を入れたとします。

# 数値を入れてしまった場合
print(greeting(123))
TypeError: can only concatenate str (not "int") to str

 

型が違うとエラーが出るようになりました。

このように、引数に型を決めることもできます。

 

コメントの付け方

最後にコメントの付け方を紹介します。

関数はどういった役割で引数、返り値はなんなのか?というのをコメントに残します。

その方が、他の人がその関数を使った時にわかりやすいです。

作った本人も数ヶ月もすれば、なんだっけ?となります。

 

コメントの付け方を紹介します。

関数の下に"""で囲って次のようにつけます。

コメントの付け方

def 関数名(引数1: 型) -> 返り値の型:

"""

関数の説明

Parameters
-------
引数 : 型
引数の説明

Returns
-------
返り値 : 型
返り値の説明
"""

    処理

    return 返り値1

 

先程の、bmiの計算関数につけてみましょう。

def calc_bmi(tall, weight, cm=True):
    """
    BMI算出
    
    Parameters
    ----------
    tall : float
        身長
    weight : float
        体重
    cm : bool
        身長がcmかどうか

    Returns
    -------
    bmi : float
        bmi値
    """
    # tallがcmかどうか判断
    if cm:
        tall = tall/100
    bmi = weight/(tall*tall)
    return bmi

 

面倒かもしれませんが、これがあると、誰がみてもわかります。

help(関数名)もしくは関数名?で確認することができます。

# 確認
help(calc_bmi)
#calc_bmi?
Help on function calc_bmi in module __main__:

calc_bmi(tall, weight, cm=True)
    BMI算出
    Parameters
    ----------
    tall : float
        身長
    weight : float
        体重
    cm : bool
        身長がcmかどうか
    
    Returns
    -------
    bmi : float
        bmi値

 

numpy.arrayとかで確認してみると同じようなコメントが出てきます。

以上が、関数についてです。お疲れ様でした。

-Python, Python 入門, プログラミング