Python入門
第13回.関数の定義(def文)と引数

Pythonの初心者向け入門解説、人気のプログラミング言語Python
最終更新日:2020-09-19

第13回.関数の定義(def文)と引数


関数は一連の処理をまとめることで再利用可能にしたものです。
プログラム内の小さなプログラムと言えるものです。
関数は引数を受け取り(引数が無い場合もあります)一連の処理をした結果を返します。


Pythonには組み込み関数がありますが、このような関数を独自に作成することができます。
Pythonには数多くの関数と型が組み込まれており、様々な処理を行うことができます。組み込み関数は、Python入門の中でもすでにいくつか使用していますし、これからも頻繁に使用していきます。全部で69個あります。
つまりユーザー定義関数を作れるという事です。
Pythonで関数を定義するには、def文を使用します。

def文での引数の指定方法はいろいろな定義方法があります。
今回は、このdef文について引数の使い方を注進に解説していきます。


目次

関数のDocstring

次回、関数内関数(関数のネスト)とlambda式(ラムダ式、無名関数)
関数は一連の処理をまとめることで再利用可能にした、プログラム内の小さなプログラムのようなものです。Pythonでの関数の記述方法は多彩です。今回は、関数内関数とスコープについて解説します。関数内関数は関数のネストです。


def文の構文

def文の基本構文です。

引数を取らない関数

def 関数名():
    関数内で実行する処理
    return 戻り値

#常に1~10のシーケンスを返します
def range10():
    return range(1,10)
defの後ろに関数名を書き、()だけを書き()括弧の中には何も書きません。
()の中に何も書かないことで引数無しの関数になります。

引数を取る関数

def 関数名(引数1, 引数2, ...):
    関数内で実行する処理
    return 戻り値

#2つの引数の掛け算の結果を返します
def mult(x,y):
    return x * y
defの後ろに関数名を書き、()の中に引数(仮引数と呼ばれます),カンマ区切りで指定します。
引数の指定方法については、後節で詳しく解説します。

関数名、引数名の規則

・半角、全角の数字と文字が使えます
・記号は_(アンダースコア)のみ使用可能
・1文字目に数字は使えません
・Pythonの予約語は使えません

returnと戻り値

return文で関数の戻り値を指定します。
あらゆるデータ型をreturnで返すことができます。

returnが実行されると関数の処理はそこで終了し、それ以降の処理は実行されません。

Python def 関数 引数

returnが無い場合、もしくは、処理分岐によりretunが実行されなかった場合は、Noneが戻されます。

returnは必ずしも無くてはならないものではありません。
処理はするが戻すべき値が存在しない場合もあります。
そのような場合は、
retun
retun None
またはretunを完全に省略します。

Python def 関数 引数

Pythonでは関数も引数もオブジェクトです。
定義した関数は、他のオブジェクト(str,float,list,tuples等)同様に扱う事が出来ます。


関数の呼び出し

スクリプトは上から順番に実行されます。
関数の定義は、関数を呼び出す行より上の行で定義されている必要があります。

引数を取らない関数

関数名()
必ず()括弧を書きます。
()括弧を省略した場合は、関数は実行されません。
対話モードでは、関数の情報が出力されます。

Python def 関数 引数

引数を取る関数

関数名(引数1, 引数2, ...)
関数名に続き()の中に引数(実引数と呼ばれます),カンマ区切りで指定します。

()括弧を省略した場合は、関数は実行されません。
対話モードでは、関数の情報が出力されます。

関数に引数がある場合に、引数を省略するとエラーになります。
ただし省略可能な引数もあります。これについては後節で説明します。

Python def 関数 引数

関数オブジェクト

関数はオブジェクトです。
定義することで、関数名のオブジェクトが作成されます。
作成された関数オブジェクトは他のオブジェクト(str,float,list,tuples等)同様に変数に入れて使う事が出来ます。
戻り値ではなく、関数そのものを変数に入れることができます。

関数オブジェクトを変数に入れる場合は、

変数 = 関数名

()括弧は付けません。
()括弧を付けると、関数が実行されて戻り値が変数に入ります。

Python def 関数 引数

いろいろな引数指定

位置引数

関数の呼び出し側で指定した実引数の順番通りに関数側の仮引数に代入されます。
つまり、仮引数(呼び出し側)と実引数(関数側)の引数の順番が一致します。
これを位置引数と呼びます。

Python def 関数 引数

※対話モードに一括貼り付けした場合、def文内のf""がエラーになるので上記ではformat関数を使用しました。

キーワード引数

引数の指定で値だけではなく仮引数名(関数で定義した引数の名前)を指定します。
これをキーワード引数と呼びます。

位置引数とキーワード引数を混在して関数を呼び出す場合は、最初に位置引数を指定し、その後でキーワード引数を記述します。

Python def 関数 引数

引数にデフォルト値を設定(=値)

def文で関数定義する引数にはデフォルト値を設定できます。
デフォルト値は、関数を呼び出す時に仮引数が省略された場合にその値になります。

・実引数が指定された場合は実引数の値
・実引数が省略された場合はデフォルト値

Python def 関数 引数

位置のみ引数(/)

Python3.8から使用できるようになった機能です。
関数呼び出し時に、位置引数でしか使用できない引数指定があります。
つまり、キーワード引数が使えなくなります。
通常は使うメリットは無いと思いますが、組み込み関数では使われているものがあります。
第12回.組み込み関数一覧
Pythonには数多くの関数と型が組み込まれており、様々な処理を行うことができます。組み込み関数は、Python入門の中でもすでにいくつか使用していますし、これからも頻繁に使用していきます。全部で69個あります。
公式ドキュメントの組み込み関数で引数が(x)のようにxで記載されているものです。

位置のみ引数にしたい引数を列挙した後に、/を指定します。
/より前に指定した仮引数が全て位置のみ引数になります。

※筆者のVisual Studio 2019では使用できませんでした。
以下はIDLEになります。

Python def 関数 引数

キーワードのみ引数(*)

関数呼び出し時に、キーワード引数でしか使用できないように引数を定義できます。
つまり、この場合は位置引数が使えなくなります。

キーワードのみ引数にしたい引数の前に、*を指定します。
*より後に指定した仮引数が全てキーワード引数になります。

Python def 関数 引数

可変長の位置引数(*args)

可変長(引数の数が不定)の位置引数を受け取れるように引数を定義できます。
仮引数名に*を付けることで可変長の位置引数になりますが、通常は*argsを使用します。
*argsが指定できる場所は、他の位置引数より後ろデフォルト値の引数より前です。
ただし、通常は最後の引数で使う事になります。

引数argsはタプルで実引数を受け取ります。
引数が省略された場合は空のタプルを受け取ります。

Python def 関数 引数

可変長のキーワード引数(**kwargs)

可変長(引数の数が不定)のキーワード引数を受け取れるように引数を定義できます。
仮引数名に**を付けることで可変長の位置引数になりますが、通常は*kwargsを使用します。
**kwargsが指定できる場所は一番最後の引数です。

引数kwargsは辞書で実引数を受け取ります。
引数が省略された場合は空の辞書を受け取ります。

Python def 関数 引数

*argsと**:kwargsの両方を同時に使う事も出来ます。

Python def 関数 引数

引数リストのアンパック

関数呼び出し時に、リストやタプルや辞書をアンパックして引き渡すことができます。

*演算子を使うと、
リスト、タプル、辞書を展開して位置引数として渡すことができます。

**演算子を使うと、
辞書を展開して、キーと値キーワードと値としてキーワード引数で渡すことができます。

Python def 関数 引数


関数のDocstring

Pythonでは関数定義の先頭にdocstring(ドキュメンテーション文字列)を記述することができます。
docstringは"""(三連ダブルクォート)で記述をはじめ、"""(三連ダブルクォート)で終わります。
docstringは、IDEでヒント表示されたり、help()関数で内容を出力することができます。。

docstring記述の規約は以下になります。
PEP 257 -- Docstring Conventions

規約は文法ではないので、スタイルはいろいろあります。

Google Python Style Guide

def div(x,y):
    """x/yを計算して返します。
    :param x: 分子
    :param y: 分母
    :return:x / y
    """
    if y == 0:
        return
    return x / y

IDEで関数を入力するとヒント表示されます。

Python def 関数 引数
※Visual Studio 2019

help()関数でdocstringを表示できます。

Python def 関数 引数




同じテーマ「Python入門」の記事

第10回.タプル(tuple型、イミュータブル)
第11回.辞書(dict型)
第12回.組み込み関数一覧
第13回.関数の定義(def文)と引数
第14回.関数内関数(関数のネスト)とスコープ
第15回.lambda(ラムダ式、無名関数)と三項演算子
第16回.Pythonの引数は参照渡しだが・・・
第17回.リスト内包表記
第18回.例外処理(try文)とexception一覧
第19回.import文(パッケージ・モジュールのインポート)
第20回.フォルダとファイルの一覧を取得(os,glob,pathlib)


新着記事NEW ・・・新着記事一覧を見る

CSV読み書き(csvモジュール)|Python入門(9月29日)
「Excel 4.0 マクロ」の使い方|VBA技術解説(9月28日)
CSV読み込みとopen()関数とwith文|Python入門(9月28日)
フォルダとファイルの一覧を取得(os,glob,pathlib)|Python入門(9月26日)
import文(パッケージ・モジュールのインポート)|Python入門(9月24日)
例外処理(try文)とexception一覧|Python入門(9月23日)
リスト内包表記|Python入門(9月22日)
Pythonの引数は参照渡しだが・・・|Python入門(9月21日)
lambda(ラムダ式、無名関数)と三項演算子|Python入門(9月20日)
関数内関数(関数のネスト)とスコープ|Python入門(9月18日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.マクロって何?VBAって何?|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.とにかく書いてみよう(Sub,End Sub)|VBA入門
10.マクロはどこに書くの(VBEの起動)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ