函数3——高级话题

递归函数

直接或间接地调用自身以进行循环的函数

L = [1,[2,3,[4,5,6,[7,8,9,10]]]]
def sumtree(L):
    t = 0
    for i in L:
        if not isinstance(i,list):
            t += i
        else:
            t += sumtree(i)
    return t
sumtree(L)
函数间接调用
#将函数名赋值给其他变量
def func(x):
    print(x)
a = func
b = a
c = b
c(1)
print(c.__name__)
#结果:
1
func
函数的属性
def func(x):
    pass
print(dir(func))
func.count = 0
func.count += 1
print(func.count)   # 1
print(dir(func))   # 多了一个“count”属性
匿名函数lambda

lambda是一个表达式,而不是一个语句。因为这一点,lambda能出现在不允许def出现的地方,例如,在一个列表常量中或函数调用的参数中。lambda返回了一个新的函数,可以选择性地赋值给一个变量名。def语句必须在头部将新的函数赋值给一个变量名(即函数名),而不是将这个函数作为结果返回。

​ lambda的主体是一个单个的表达式,而不是一个代码块。简单地将结果写成一个表达式,而不是明确的返回。

f = lambda x,y,z:x+y+z
print(f(1,2,3))  # 6

L =[lambda x:x*2,lambda x:x*3,lambda x:x*4]
for f in L:
    print(f(1),end = '  ')  #结果:2  3  4  

#lambda嵌套
f=lambda x:lambda y:x+y
f(1)(2)
高阶函数

符合下列一个条件:
接受一个或多个函数作为输入(参数)
输出(返回)一个函数

两个重要内置函数map和filter

​ 映射函数map(function,iterable)

​ map有两参数,第一个参数为函数,第二个参数为可迭代对象,map的作用:iterable中的每一项元素作为function的参数,并返回一个含有所有执行结果的可迭代对象。

def func(x):
    return x+1
L = [1,2,3]
res = map(func,L)
print(list(res)) #[2,3,4]

lambda与map

ret = map(lambda x:x+1,[i for i in range(1,4)])
print(list(ret))  # #[2,3,4]

filter

filter(function or None, iterable) --> 返回一个迭代器,该迭代器生成那些函数(项)为true的iterable项。如果函数为None,则返回为true的项。

res = filter(None,[0,3,''])
print(list(res))
#结果:
[3]
# -----------------------------
def fun(n):
    return n % 2
res = filter(fun,range(0,5))
print(list(res))
#结果:
[1,3]

转载于:https://www.cnblogs.com/notfind/p/11517662.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值