Python 3.4.4 (v3.4.4:737efcadf5a6, Dec 20 2015, 20:20:57) [MSC v.1600 64 bit (AMD64)] on win32 Type "copyright", "credits" or "license()" for more information. #defining an anonymous value (int) >>> print(2**10) 1024 #defining an anonymous function and calling it for a given input >>> (lambda x: x+2)(4) 6 #creating a named-function (similar to using: "def ...") >>> plus2 = (lambda x: x+2) >>> plus2(4) 6 >>> (lambda x: x+2) at 0x00000000035BDD90> >>> (lambda x,y,z : x,y,z)(2,3,4) Traceback (most recent call last): File "", line 1, in (lambda x,y,z : x,y,z)(2,3,4) NameError: name 'y' is not defined >>> (lambda x,y,z : x*y*z)(2,3,4) 24 >>> (lambda x,y,z : (x,y,z))(2,3,4) (2, 3, 4) #An example of a function that returns a function - two methods for defining it >>> def make_pow(n): def fixed_pow(x): return x**n return fixed_pow >>> square = make_pow(2) >>> square(4) 16 >>> make_pow(2)(4) 16 #make_pow using lambda >>> def make_pow(n): return lambda x : x**n >>> cube = make_pow(3) >>> cube(2) 8 >>> cube(4) 64 >>> >>> >>> #An example of a function that recieves a function as an argument: sorted >>> lst = ["amirr", "michal", "benny", "amirg"] >>> sorted(lst, key= lambda s : len(s)) ['amirr', 'benny', 'amirg', 'michal'] >>> lst = ["amirrub", "michal", "benny", "amirg"] >>> sorted(lst, key= lambda s : len(s)) ['benny', 'amirg', 'michal', 'amirrub'] >>> sorted(lst, key=len) ['benny', 'amirg', 'michal', 'amirrub'] >>> sorted(lst, key= lambda s : s[::-1]) ['amirrub', 'amirg', 'michal', 'benny'] >>> sorted(["44", "3", "-1"], key=int) ['-1', '3', '44'] >>> sorted(lst, key=int) Traceback (most recent call last): File "", line 1, in sorted(lst, key=int) ValueError: invalid literal for int() with base 10: 'amirrub' >>> def first(s): return s[0] >>> sorted(lst, key=first) ['amirrub', 'amirg', 'benny', 'michal'] >>> >>> >>> #compose is a function that gets two functions as arguments and returns a function >>> def compose(f1, f2): def com(x): return f1(f2(x)) return com >>> h = compose(lambda x : x + 2, lambda x : x*2) >>> h(1) 4 >>> h(8) 18 #compose using lambda >>> def compose(f1, f2): return lambda x : f1(f2(x)) >>> h = compose(lambda x : x + 2, lambda x : x*2) >>> h(8) 18 >>> h(1) 4 #getting to know the * for defining a method that recieves 0 or more parameters #in our example params is a tuple >>> def print_cons_sublist(lst, func, *params): return func(lst, *params) >>> func = lambda lst, i, j : print(lst[i:j] if i < j else "bad range") >>> >>> print_cons_sublist([i for i in range(100)], func, 50, 55) [50, 51, 52, 53, 54] >>> def print_sublist(lst, func, *params): return func(lst, params) >>> func = lambda lst, tup : print([x for x in lst if x in tup]) >>> print_sublist([i for i in range (100)], func, 50, 55) [50, 55] >>> print_sublist([i for i in range (100)], func, 50, 55,-1) [50, 55] >>> print_sublist([i for i in range (100)], func, 50, 55,-1, 20) [20, 50, 55] >>> def print_sublist(lst, func, *params): print(params) return func(lst, params) SyntaxError: unindent does not match any outer indentation level >>> def print_sublist(lst, func, *params): print(params) return func(lst, params) >>> print_sublist([i for i in range (100)], func, 50, 55,-1, 20) (50, 55, -1, 20) [20, 50, 55] >>> def print_sublist(lst, func, *params): print(*params) return func(lst, params) >>> print_sublist([i for i in range (100)], func, 50, 55,-1, 20) 50 55 -1 20 [20, 50, 55] >>>