进阶 第四课:函数(第四节)

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)
原文地址:https://www.cnblogs.com/huiming/p/6009671.html