Pythonプログラミングの講義8日目。
講義のコマ割りが明らかに初心者向け。内部関数、クロージャ、lambda、ジェネレータ、デコレータを1コマでサラッと説明。
基本構文までをサラッと流して、ここらへんからジックリ講義した方が、良いのだけどなぁ。
- 参考テキスト
【講義内容】
- Chapter3 条件分岐と繰り返し、関数を使う
【ワンポイント】
可変長引数
def func(*args): if args: for i in range(len(args)): print(f'args[{i}]: {args[i]}') a = 'A' b = 'B' c = 'C' func(a) func(a, b) func(a, b, c) def func2(arg1, *args, arg2): print(arg1, args, arg2) a = 'A' b = ['B', 'D'] c = 'C' func2(a, arg2=c) func2(a, 'B', 'D', 'E', arg2=c) #func2(arg2=c, *b, arg1=a)
辞書型キーワード引数
def func(**kwargs): if kwargs: print(kwargs) o = {'a': 'A', 'b': 'B'} func(a='A', b='B') func(**o)
a = 5 b = 3 def add(a, b): return a+b def sub(a, b): return a-b def dofunc(func, a, b): return func(a, b) dofunc(add, a, b) dofunc(sub, a, b)
内部関数
def outer(s): def inner(): return s+'@@@' return inner i = outer('what is s.') print(i()) print(i()) def outer2(s): print(f'OUTER: {id(s)}') def inner2(): print(f'INNER: {id(s)}') return s + '!!!' return inner2 s = 'what is s' print(f'GLOBAL: {id(s)}') i2 = outer2(s) print(i2()) print(i2())
def click_counter(i): def click(): return i+1 return click c0 = click_counter(0) print(c0()) print(c0()) def click_counter1(i): def click(): nonlocal i i += 1 return i return click c1 = click_counter1(0) print(c1()) print(c1()) c2 = click_counter1(3) print(c2()) print(c2())
lambda式
def tostr(i): return str(i) def iconv(l, func): for i in l: print(func(i)) iconv(range(5), tostr) iconv(range(5), lambda i: '@' * i)
ジェネレータ
def countdown(i): for i in range(i,0,-1): yield i t = countdown(5) print(next(t)) print(next(t)) print(next(t))
【今日の積み上げ】
- Python基礎