#!/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