#!/usr/bin/env python
# coding: utf-8
"""
関数の練習
"""
__author__ = "kagyuu <kagyuu@hondou.homedns.org>"
__version__ = "0.00"
__date__ = "14 Oct 2012"
#######################################################################
def func1(arg1, arg2, arg3='3rd') :
"""
一般的な関数.
@param arg1 引数1
@param arg2 引数2 @param arg3 引数3 (デフォルト値 '3rd')
@return 引数の辞書(key = ('arg1', 'arg2', 'arg3'))
"""
return {'arg1' : arg1, 'arg2' : arg2, 'arg3' : arg3}
#######################################################################
def func2(*lst) :
"""
リストを引数とする関数.
@param lst 引数1
@return lst の各要素に 1 を加えたリスト
"""
return [ elem + 1 for elem in lst ]
#######################################################################
def func3(**dict) :
"""
辞書を引数とする関数.
@param dict 引数1
@return dict の各要素に 1 を加えた辞書
"""
return { key:(val+1) for key,val in dict.items() }
#######################################################################
def func4(x, y) :
"""
複数の値を返す関数.
@param x int1
@param y int2
@return x+1, y+1
"""
return x+1, y+1
#######################################################################
def main() :
"""
本モジュールをコマンドラインから実行するための関数.
"""
try :
print('func1(\'x\')=' + func1('x'))
except TypeError as te :
print(te)
print('func1(\'x\',\'y\')=' + str(func1('x','y')))
print('func1(\'x\',\'y\',\'z\')=' + str(func1('x','y','z')))
print('func1(arg2=\'x\',arg3=\'y\',arg1=\'z\')=' + str(func1(arg2='x', arg3='y', arg1='z')))
print('func1(*[\'p\',\'q\',\'r\'])=' + str(func1(*['p','q','r'])))
print('func1(**{\'arg2\':\'p\', \'arg3\':\'q\', \'arg1\':\'r\'})=' \
+ str(func1(**{'arg2':'p', 'arg3':'q', 'arg1':'r'})))
print('func2()=' + str(func2()))
print('func2(1,2,3,4)=' + str(func2(1,2,3,4)))
print('func3()=' + str(func3()))
print('func3(l=22, m=23, n=32, o=33)=' + str(func3(l=22, m=23, n=32, o=33)))
p, q = func4(3, 4)
print('func4(3, 4)=(' + str(p) + ',' + str(q) + ')')
if __name__ == '__main__':
main()
$ ./function1.py func1() takes at least 2 arguments (1 given) func1('x','y')={'arg1': 'x', 'arg2': 'y', 'arg3': '3rd'} func1('x','y','z')={'arg1': 'x', 'arg2': 'y', 'arg3': 'z'} func1(arg2='x',arg3='y',arg1='z')={'arg1': 'z', 'arg2': 'x', 'arg3': 'y'} func1(*['p','q','r'])={'arg1': 'p', 'arg2': 'q', 'arg3': 'r'} func1(**{'arg2':'p', 'arg3':'q', 'arg1':'r'})={'arg1': 'r', 'arg2': 'p', 'arg3': 'q'} func2()=[] func2(1,2,3,4)=[2, 3, 4, 5] func3()={} func3(l=22, m=23, n=32, o=33)={'m': 24, 'l': 23, 'o': 34, 'n': 33} func4(3, 4)=(4,5)
>>> def func(lst = []) : ... lst.append('x') ... return lst ... >>> print(func()) ['x'] >>> print(func()) ['x', 'x']
>>> def func2(lst = None) : ... lst = [] ... lst.append('x') ... return lst ... >>> print(func2()) ['x'] >>> print(func2()) ['x']
>>> (lambda x,y : x*y)(4, 9) 36
>>> f = filter( lambda t : t > 0, [-1, 3, 9, 23, -296,123] ) >>> list(f) [3, 9, 23, 123]
#!/usr/bin/env python
# coding: utf-8
"""
関数の練習2
"""
__author__ = "kagyuu <kagyuu@hondou.homedns.org>"
__version__ = "0.00"
__date__ = "14 Oct 2012"
#######################################################################
def appendlog(f) :
"""
デコレータ.
@param f 機能を追加する関数
@return 機能を追加した関数
"""
def func(*args, **kwds) :
"""
f にログ機能を追加した関数
@param args 引数(引数名を指定しない場合)
@param kwds 引数(引数名を指定した場合)
@return f の処理結果
"""
print('--▽--- 処理を開始します')
print('args=' + str(args))
print('kwds=' + str(kwds))
result = f(*args, **kwds)
print('--△--- 処理を終了しました')
return result
return func
#######################################################################
@appendlog
def avr(x, y, z) :
"""
平均を求めます.
@param x 引数
@param y 引数
@param z 引数
@return x,y,z の平均
"""
return (x+y+z) / 3.0
#######################################################################
def main() :
"""
本モジュールをコマンドラインから実行するための関数.
"""
print(avr(20, 30, 40))
print(avr(x=20, y=30, z=40))
if __name__ == '__main__':
main()
$ ./function2.py --▽--- 処理を開始します args=(20, 30, 40) kwds={} --△--- 処理を終了しました 30.0 --▽--- 処理を開始します args=() kwds={'y': 30, 'x': 20, 'z': 40} --△--- 処理を終了しました 30.0
#!/usr/bin/env python
# coding: utf-8
"""
関数の練習3
"""
__author__ = "kagyuu <kagyuu@hondou.homedns.org>"
__version__ = "0.00"
__date__ = "14 Oct 2012"
#######################################################################
def addn(n) :
def _addn(f) :
def func(*args, **kwds) :
return f(*args, **kwds) + n
return func
return _addn
#######################################################################
@addn(123)
def avr(x, y, z) :
"""
平均を求めます.
@param x 引数
@param y 引数
@param z 引数
@return x,y,z の平均
"""
return (x+y+z) / 3.0
#######################################################################
def main() :
"""
本モジュールをコマンドラインから実行するための関数.
"""
print(avr(20, 30, 40))
if __name__ == '__main__':
main()
$ ./function3.py 153.0