1# ----------------- 2# lambdas 3# ----------------- 4a = lambda: 3 5#? int() 6a() 7 8x = [] 9a = lambda x: x 10#? int() 11a(0) 12 13#? float() 14(lambda x: x)(3.0) 15 16arg_l = lambda x, y: y, x 17#? float() 18arg_l[0]('', 1.0) 19#? list() 20arg_l[1] 21 22arg_l = lambda x, y: (y, x) 23args = 1,"" 24result = arg_l(*args) 25#? tuple() 26result 27#? str() 28result[0] 29#? int() 30result[1] 31 32def with_lambda(callable_lambda, *args, **kwargs): 33 return callable_lambda(1, *args, **kwargs) 34 35#? int() 36with_lambda(arg_l, 1.0)[1] 37#? float() 38with_lambda(arg_l, 1.0)[0] 39#? float() 40with_lambda(arg_l, y=1.0)[0] 41#? int() 42with_lambda(lambda x: x) 43#? float() 44with_lambda(lambda x, y: y, y=1.0) 45 46arg_func = lambda *args, **kwargs: (args[0], kwargs['a']) 47#? int() 48arg_func(1, 2, a='', b=10)[0] 49#? list() 50arg_func(1, 2, a=[], b=10)[1] 51 52# magic method 53a = lambda: 3 54#? ['__closure__'] 55a.__closure__ 56 57class C(): 58 def __init__(self, foo=1.0): 59 self.a = lambda: 1 60 self.foo = foo 61 62 def ret(self): 63 return lambda: self.foo 64 65 def with_param(self): 66 return lambda x: x + self.a() 67 68 lambd = lambda self: self.foo 69 70#? int() 71C().a() 72 73#? str() 74C('foo').ret()() 75 76index = C().with_param()(1) 77#? float() 78['', 1, 1.0][index] 79 80#? float() 81C().lambd() 82#? int() 83C(1).lambd() 84 85 86def xy(param): 87 def ret(a, b): 88 return a + b 89 90 return lambda b: ret(param, b) 91 92#? int() 93xy(1)(2) 94 95# ----------------- 96# lambda param (#379) 97# ----------------- 98class Test(object): 99 def __init__(self, pred=lambda a, b: a): 100 self.a = 1 101 #? int() 102 self.a 103 #? float() 104 pred(1.0, 2) 105 106# ----------------- 107# test_nocond in grammar (happens in list comprehensions with `if`) 108# ----------------- 109# Doesn't need to do anything yet. It should just not raise an error. These 110# nocond lambdas make no sense at all. 111 112#? int() 113[a for a in [1,2] if lambda: 3][0] 114