In [7]:
# *による位置引数のタプル化
def show_args(*args):
print('位置引数:', args)
show_args()
show_args(1,2,3,'テスト')
# **によるキーワード引数の辞書化
def show_kwargs(**kwargs):
print('辞書引数:', kwargs)
show_kwargs(key1='値1', key2='値2', キー3='値3')
In [8]:
# クロージャ
def return_closure(arg):
def closure_function():
return "渡された引数は'%s'です" % arg
return closure_function
a = return_closure('テスト1')
b = return_closure('テスト2')
print(a())
print(b())
In [11]:
# ジェネレータ
def generator_range(first=0, last=10, step=1):
number=first
while number < last:
yield number
number+=step
ranger = generator_range(1,5)
for x in ranger:
print(x)
In [5]:
# デコレータ(使わない場合)
# デコレータは、入力として関数をひとつ取り、別の関数を返す関数
def print_func(func):
def new_function(*args, **kwargs):
print('関数', func.__name__, 'を実行します。')
print('位置引数は', args, 'です')
print('キーワード引数は', kwargs, 'です')
result = func(*args, **kwargs)
print('実行結果は', result, 'です')
return result
return new_function
def add_ints(a, b, **dummy):
return a+b
printer = print_func(add_ints)
print(printer(3,6, dummy='ダミー'))
In [2]:
# デコレータ(使う場合)
def print_func(func):
def new_function(*args, **kwargs):
print('関数', func.__name__, 'を実行します。')
print('位置引数は', args, 'です')
print('キーワード引数は', kwargs, 'です')
result = func(*args, **kwargs)
print('実行結果は', result, 'です')
return result
return new_function
def square_it(func):
def new_function(*args, **kwargs):
result = func(*args, **kwargs)
return result * result
return new_function
@print_func
def add_ints(a, b, **dummy):
return a+b
@print_func
@square_it
def add_ints2(a, b, **dummy):
return a+b
print(add_ints(3,6, dummy='ダミー'))
print('------')
# こちらは実行結果が異なる
print(add_ints2(3,6, dummy='ダミー'))
In [ ]: