PythonによるYコンビネータの仕組みの(多分)わかりやすい説明より。
F = lambda f: lambda n: n if n < 2 else f(n - 1) * n Y = lambda f: (lambda x: lambda m: f(x(x))(m))(lambda x: lambda m: f(x(x))(m)) print(Y(F)(5))
def add_curried(x): def _add(y): return x+y return _add print(add_curried(2)(3)) def add_curried2(x): return lambda y:x + y print(add_curried2(2)(3)) add_curried3 = lambda x:lambda y:x + y print(add_curried3(2)(3))
#if pr = lambda s:s namenum = lambda x: (x==1 and pr("one")) \ or (x == 2 and pr("two")) \ or (pr("other")) print(namenum(1)) print(namenum(2)) print(namenum(3)) #for #for e in lst:func(e) lst=[1,2,3,4] print(list(map(lambda x:x*x,lst))) #順次作業 def f1(): print("f1") def f2(): print("f2") def f3(): print("f3") # let's create an execution utility function do_it =lambda f: f() list(map(do_it, [f1,f2,f3]))# map()-based action sequence
## 配列の各要素に計算式/変換式を適用する関数 def my_map(func, arr): newarr = [] for x in arr: newarr.append(func(x)) # 各要素に計算式/変換式を適用する return newarr a=range(10) print(my_map(lambda x:x*2,a)) ## 配列の各要素から、条件式/判定式を満たしたものだけを選んで返す関数 def my_filter(func, arr): newarr = [] for x in arr: if func(x): # 条件式/判定式を満たした要素だけを選ぶ newarr.append(x) return newarr print(my_filter(lambda x:x%2 == 0,a)) ## 配列の各要素に対し、何らかの計算や処理を行い、積み重ねた結果を返す def my_reduce(func, arr, initial): t = initial # 初期値 for x in arr: t = func(t, x) # 計算や処理を行う return t print(my_reduce(lambda x,y:x+y,a,0)) #from functools import reduce
def deco(func): def wrapper(*args, **kwargs): print('--start--') func(*args, **kwargs) print('--end--') return wrapper @deco def test(): print('Hello Decorator') test()
with open("techacademy.txt", "r") as fileread: print(fileread.read())