自由きままに楽しまないとね

こんなこと知ってますか?という幅広い雑記ブログ

【Python】関数の使い方

備忘録

Pythonを勉強する際に参考にさせていただいたサイトの内容を備忘録としてまとめたものです。
以下のPythonコードの動作確認はWindows版のバージョン「3.7」で行っております。

関数

命名規則

変数の命名規則は変数と同様に
「全小文字 + アンダースコア区切り」
と定められています。

※例では先頭文字に「d_」を関数として宣言しています。

宣言

def d_abc():
    return 0
num1 = d_abc()
print(num1)        # 0
print(type(num1))  # <class 'int'>

引数

# デフォルト値なし
def d_func1(val):
    return str(val) + "$abc"

str1 = d_func1(123)

print(str1)        # 123$abc
print(type(str1))  # <class 'str'>

# デフォルト値あり
def d_func2(val=567):
    return str(val) + "$abc"

str1 = d_func2()
str2 = d_func2(123)

print(str1)        # 567$abc
print(type(str1))  # <class 'str'>

print(str2)        # 123$abc
print(type(str2))  # <class 'str'>

# 可変長引数
def d_func3(*args):
    print(args)
    print(type(args))

d_func3()
# ()
# <class 'tuple'>

d_func3(100)
# (100,)
# <class 'tuple'>

d_func3(100, 200)
# (100, 200)
# <class 'tuple'>

# 可変長辞書
def d_func4(**args):
    print(args)
    print(type(args))

d_func4()
# {}
# <class 'dict'>

d_func4(a1='v1')
# {'a1': 'v1'}
# <class 'dict'>

d_func4(a1='v1', a2='v2')
# {'a1': 'v1', 'a2': 'v2'}
# <class 'dict'>

#----------------------------
# キーの重複はSyntaxError
d_func4(a1='v1', a1='v2')
# SyntaxError: keyword argument repeated

#----------------------------
# 辞書形式以外の引数渡しはTypeError
d_func4(100)
# TypeError: d_func4() takes 0 positional arguments but 1 was given

# 可変長の引数は組み合わせが可能
def d_func5(args1, *args2, **args3):
    print(args1)
    print(args2)
    print(args3)

d_func5(100, 200, 300, k1=11, k2=22)
# 100
# (200, 300)
# {'k1': 11, 'k2': 22}

d_func5(100)
# 100
# ()
# {}

戻り値

# 戻り値なし
def d_back1():
    return

result1 = d_back1()

print(result1)        # None
print(type(result1))  # <class 'NoneType'>

# 配列戻し
def d_back2():
    list2 = [1, 2, 3]
    return list2

result2 = d_back2()

print(result2)         # [1, 2, 3]
print(result2[1])      # 2
print(type(result2))   # <class 'list'>

# 複数の戻り値
def d_back3():
    num3 = 11
    str3 = 'dcf'
    return num3, str3

result31, result32 = d_back3()

print(result31)         # 11
print(type(result31))   # <class 'int'>
print(result32)         # dcf
print(type(result32))   # <class 'str'>

グローバル変数

Python3では関数内にてグローバル変数を参照・編集することはできません。
グローバル変数を参照・編集する際にはglobalを宣言します。

num1 = 11
def d_func():
    global num1
    print(num1)  # 11
    num1 = 22
    print(num1)  # 22

d_func()

ラムダ式

小さな関数を構築できます。
戻り値は1つのみ返却が可能です。

# 商を求める
func1 = lambda x, y : x // y
print(func1(16, 3))

# カウントアップする
func2 = lambda x : x + 1
num2 = 0
num2 = func2(num2)
print(num2)           # 1
num2 = func2(num2)
print(num2)           # 2
num2 = func2(num2)
print(num2)           # 3

参考

http://www.tohoho-web.com/python/function.html
http://taustation.com/python3-variable-scope/