1# mode: run 2# tag: lambda 3# ticket: 195 4 5__doc__ = u""" 6#>>> py_identity = lambda x:x 7#>>> py_identity(1) == cy_identity(1) 8#True 9""" 10 11#cy_identity = lambda x:x 12 13 14def make_identity(): 15 """ 16 >>> idcall = make_identity() 17 >>> idcall(1) 18 1 19 >>> idcall(2) 20 2 21 """ 22 return lambda x:x 23 24def make_const0(x): 25 """ 26 >>> make_const0(1)() 27 1 28 """ 29 return lambda :x 30 31def make_const1(x): 32 """ 33 >>> make_const1(1)(2) 34 1 35 >>> make_const1(1)(2) 36 1 37 """ 38 return lambda _:x 39 40 41def make_const_calc0(): 42 """ 43 >>> make_const_calc0()() 44 11 45 """ 46 return lambda : 1*2*3+5 47 48def make_const_calc1(): 49 """ 50 >>> make_const_calc1()(2) 51 11 52 """ 53 return lambda _: 1*2*3+5 54 55def make_const_calc1_xy(x): 56 """ 57 >>> make_const_calc1_xy(8)(2) 58 27 59 """ 60 return lambda y: x*y+(1*2*3+5) 61 62def make_lambda_lambda(x): 63 """ 64 >>> make_lambda_lambda(1)(2)(4) 65 7 66 """ 67 return lambda y : \ 68 lambda z:x+y+z 69 70def make_typed_lambda_lambda(int x): 71 """ 72 >>> make_typed_lambda_lambda(1)(2)(4) 73 7 74 75 >>> partial_lambda = make_typed_lambda_lambda(1)(2) 76 >>> partial_lambda(4) 77 7 78 >>> partial_lambda(5) 79 8 80 """ 81 return lambda int y : \ 82 lambda int z:x+y+z 83 84def pass_lambda(f): 85 """ 86 >>> def f(a, lfunc): return lfunc(a,2) 87 >>> pass_lambda(f) 88 12 89 """ 90 return f(1, lambda a, b : a*10+b) 91 92def pass_lambda_with_args(f): 93 """ 94 >>> def f(a, lfunc): return lfunc(a,2,3) 95 >>> pass_lambda_with_args(f) 96 123 97 """ 98 return f(1, lambda a, *args : (a*10 + args[0])*10 + args[1]) 99 100def pass_lambda_with_args_kwargs(f): 101 """ 102 >>> def f(a, lfunc): return lfunc(a,2,3, b=4) 103 >>> pass_lambda_with_args_kwargs(f) 104 1234 105 """ 106 return f(1, lambda a, *args, **kwargs : ((a*10 + args[0])*10 + args[1])*10 + kwargs['b']) 107 108def pass_lambda_with_args_kwargs_kwonly_args(f): 109 """ 110 >>> def f(a, lfunc): return lfunc(a,2,3, b=4, c=5) 111 >>> pass_lambda_with_args_kwargs_kwonly_args(f) 112 12345 113 """ 114 return f(1, lambda a, *args, b, **kwargs : (((a*10 + args[0])*10 + args[1])*10 + b)*10 + kwargs['c']) 115