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]$