2021-03-11に更新

Python 関数の定義 - function

Pythonでの関数定義の記述方法についての解説です。

関数の定義

キーワードdefを使用して関数の定義を行うことができます。

def 関数名(引数1, 引数2):
    関数の処理

e.g.
def add(number1, number2):
    return number1 + number2

add(2, 3) ## => 5

デフォルトの引数値

引数には、デフォルト値を指定可能です。

def add(number1 = 0, number2 = 0):
    return number1 + number2

print(add(2, 3)) ## => 5
print(add(2)) ## => 2
print(add()) ## => 0

キワード引数(名前付き引数)

変数名を名称で指定して関数を呼び出す事ができる。

def named_parameter_function(p1, p2, str1='A', str2='B', str3='C'):
    print('p1', p1)
    print('p2', p2)
    print('str1', str1)
    print('str2', str2)
    print('str3', str3)

named_parameter_function(1, 2)
named_parameter_function(1, p2=2)
named_parameter_function(1, 2)
named_parameter_function(1, p2=2 , str2='X')

可変引数

*変数名で位置で渡される可変個の引数、
**変数名でキーワードで渡される可変個の引数を受け取る事ができる。

def variable_arguments_function(p1, p2 , p3=3, *arguments, **keywords):
    print('p1', p1)
    print('p2', p2)
    print('p3', p3)
    for arg in arguments:
        print("arguments", arg)
    for kw in keywords:
        print(kw, ":", keywords[kw])

variable_arguments_function(1, 2, 3, 4, 5, 6, kw1="A", kw2="B")
p1 1
p2 2
p3 3
arguments 4
arguments 5
arguments 6
kw1 : A
kw2 : B

型ヒント(型アノテーション)

関数の引数右に: 型、関数閉じ括弧の右に-> 型を付与することで、
関数が期待する型をヒントとして記載できる。

def add(number1: int, number2: int = 0) -> int:
    return number1 + number2

デコレータ

関数宣言の前に@デコレータ名とすることで、
対象関数の実行時に特定の処理を行う事ができるようになります。

デコレータは高階関数です。対象の関数を引数に受け取り、
関数実施の前後で処理を行ったり、関数の呼び出し方法を制御できます。

def decorator_sample(func):

    def wrapper(*arguments, **keywords):
        print('begin')
        r = func(*arguments, **keywords)
        print('end')
        return r

    return wrapper

@decorator_sample
def add(number1: int, number2: int = 0) -> int:
    r = number1 + number2
    print(r)
    return r

add(1, 2)
# =>+
# begin
# 3
# end

引数のアンパック

引数を位置で指定する必要がある場合リストのままでは渡せない。
その場合は引数として渡す変数の先頭に*を付与しunpackすることで呼び出しが可能となります。

list(range(0, 9, 2)) # => [0, 2, 4, 6, 8]

range_parameters = [0, 9, 2]
list(range(*range_parameters)) # => [0, 2, 4, 6, 8]

list(range(range_parameters)) #=> TypeError: 'list' object cannot be interpreted as an integer

マッピング型(dict)は**を付与することで、キーワード引数として渡す事ができる。

variable_arguments_function(1, 2, 3, 4, 5, 6, kw1="A", kw2="B")

position_parameters = [1, 2, 3, 4, 5, 6]
named_parameters = {"kw1":"A", "kw2":"B"}
variable_arguments_function(*position_parameters, **named_parameters)

ラムダ式

チョットした関数はキーワードlambdaで定義できます。

def get_decorator(wrap):
    return lambda body: wrap + body + wrap

contents = "ABCDE"

asterisk_decorator = get_decorator("***")
print(asterisk_decorator(contents))
# => ***ABCDE***

equals_decorator = get_decorator("===")
print(equals_decorator(contents))
# => ===ABCDE===
Originally published at marusankakusikaku.jp
ツイッターでシェア
みんなに共有、忘れないようにメモ

maru3kaku4kaku

Pythonこつこつ学習中。よく忘れる。

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント