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)