step1: 习题反馈 step2: lambda之再议 1. lambda是一个表达式 2. 它没有名称,存储也不是代码块,而是表达式 3. 它被用作执行很小单元, 不能在里面使用条件语句 step3:参数总结 1. 位置匹配 func(name) 2. 关键字匹配 func(key=value) 3. 收集匹配 1)元组收集 func(name, arg1, arg2) 2) 字典收集 func(name, key1 = value1, key2 = value2) 4. 参数顺序 step4:接触递归 1. 递归是调用自身 2. 里面下面的函数 # 用法一:lambda三元表达式 d = lambda x: x+1 print d(2) # 等价于 def func(x): return x+1 print func(2) d1 = lambda x: x+1 if x>0 else 'None' print d1(10) print d1(-1) # 用法二:使用了列表推导式 g = lambda x: [(x,i) for i in xrange(0,2)] print g(2) # [(2, 0), (2, 1)] # 用法三:结合filter函数用于过滤 t = [1, 10, 3, 6, 8] f = filter(lambda x:x>3, t) print f # [10, 6, 8] t1 = (1, 10, 3, 6, 8) f1 = filter(lambda x:x>3, t) print f1 # [10, 6, 8] #说明:filter函数用法是:filter(fuction,list):将list中每一个元素带入到function中,计算返回值,将返回值为True的list中的元素形成一个新的list. # 位置参数 def func(arg1, arg2, arg3): return arg1, arg2, arg3 print func(1, 2, 3) # 关键字参数 def func1(k1 = '', k2 = None, k3 = ''): return k1, k2, k3 print func1(1, 2, 3) # (1,2,3) print func1(1, 3) # (1,3,'') print func1(k3 = 1, k1 = 2) # def func2(*kargs, **kwargs): return kargs print func2(2,3,4,5,6,7,[1,2,3,0]) # 报错 def func2(*kargs, **kwargs): return kargs print func2(2,3,4,5,6,7,[1,2,3,0]) # (2,3,4,5,6,7,[1,2,3,0]) def func2(*kargs, **kwargs): return kargs # return kwargs print func2(2,3,4,5,6,7,[1,2,3,0]) # {} print func2(2, 3, 4,[2,3,0],{1:2,3:4},(2,3),{'a':1, 'b':2}) """ *kargs 元组 **kwargs 字典 位置参数 1. 先是位置匹配的参数 2. 再是关键字匹配的参数 3. 收集匹配的元素参数 4. 收集匹配的关键字参数 按照上面的方法定义一个函数参数, 所定义的函数才不会报语法错误 """ def func(i): if i < 100: return i+func(i+1) return i print func(1) # 用递归计算n的阶乘 def func(n): if n == 1: return 1 else: return n*func(n-1) print func(4) def func1(n): result = n for i in range(1,n): result = result*i return result print func1(4)