Python_関数

関数定義

Pythonの関数はインデントでブロック(文のあつまり)を明示します。

また、改行は文と文を区切りを明示します。


戻り値

単一の戻り値を返す。

関数にreturn文を書かない場合はNoneが返ります。


#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# vim:fileencoding=utf-8
# coding=utf8

import sys


def func1():
    pass  # return文を書かない場合はNoneが返る。


def func2():
    return  # return文に戻り値を指定しない場合はNoneが返る。


def func3():
    return 0  # 数値を返す。


def func4():
    return sys._getframe().f_code.co_name  # 文字列を返す。


print(func1())  # None
print(func2())  # None
print(func3())  # 0
print(func4())  # func4

複数戻り値をを返す。

Pythonの関数の特徴は、複数の戻り値を返せることです。


#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# vim:fileencoding=utf-8
# coding=utf8


# 複数戻り値を返す。
def func5():
    return "str1", "str2", "str3"


# 戻り値を個別の変数に格納する。
ret1, ret2, ret3 = func5()
print(ret1)  # str1
print(ret2)  # str2
print(ret3)  # str3

# 複数戻り値はタプルで返されます・
ret = func5()
print(ret)  # ('str1', 'str2', 'str3')
print(ret[0])  # str1


# 異なる型で複数戻り値を返す。
def func6():
    return True, 0, "string"


# 型が違う戻り値を個別の変数に格納する。
ret1, ret2, ret3 = func6()
print(ret1)  # True
print(ret2)  # 0
print(ret3)  # string

# 複数戻り値はタプルで返されます・
ret = func6()
print(ret)  # (True, 0, 'string')
print(ret[0])  # True

引数

引数の指定方法

引数に対する型指定はありません。

デフォルト引数を指定できます。デフォルト引数は右側から指定する必要があります。


#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# vim:fileencoding=utf-8
# coding=utf8


def func1(arg):
    print(arg)


def func2(arg1, arg2):
    print(arg1 + arg2)


def func3(arg1, arg2='ruby', arg3="thon"):
    print(arg1 + arg2 + arg3)


func1(False)  # False
func2(7, 11)  # 18
func3('P', 'y')  # Python

可変引数

可変長引数は引数の前に「*」を付けます。

可変長引数はタプルで渡されます。


#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# vim:fileencoding=utf-8
# coding=utf8


def func4(*args):  # 可変長引数のみ
    print(args)

    for arg in args:
        print(arg, end="")
    print("\n")


def func5(arg1, *args):  # 固定の引数と可変長引数
    print(arg1, args)


# 可変長引数はタプルで渡されます。
func4('P', 'y', 't', 'h', 'o', 'n')  # ('P', 'y', 't', 'h', 'o', 'n')

# 異なる型を指定することもできます。
func4(True, 1, "str")  # (True, 1, 'str')

# 固定長引数と可変長引数を組み合わせることもできます。
# 可変長引数はタプルで渡されます。
func5("str", False, 0)  # str (False, 0)

キーワード引数

引数に「**」を指定すると辞書化します。

キーワード名と値の入った辞書なのでget メソッドで取得できます。

また、Python3 では引数に「*」をはさむことで以降の変数はキーワードでしか呼べなくなる機能が追加されました。


#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# vim:fileencoding=utf-8
# coding=utf8


def func6(arg1, arg2):
    print("arg1=%d" % arg1)
    print("arg2=%d" % arg2)


# 通常の引数指定は順番通りに渡されます。
func6(1, 2)

# キーワード指定すると、渡し先の変数を明示できます。
func6(arg2=2, arg1=1)

def func7(arg1, **keyargs):
    print(arg1, keyargs)
    print(keyargs.get('key1')) # キーワードがなければNoneを返す。
    print(keyargs.get('key2', "defaultValue")) #デフォルト値を指定できる。

func7("argument") # argument {}
func7("argument", key1=1) # argument {'key1': 1}
func7("argument", key1=1, key2="keyword") # argument {'key1': 1, 'key2': 'keyword'}

# Python 3からサポートされた機能です。
def func7(arg1, *, key1="default"):
    print(arg1, key1)

func7("argument") # argument default
func7("argument", key1="keyword") # argument keyword
[cpsp@km-cps-server pythonFactory]$

関連ページ