zoukankan      html  css  js  c++  java
  • 函数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]
    
    
  • 相关阅读:
    解决“Caused by: org.gradle.api.plugins.UnknownPluginException: Plugin with id 'org.springframework.boot' not found.”
    linux随机生成密码
    NFS网络共享文件系统
    shell实现带颜色输出的进度条
    【AtCoder】 ARC 101
    【AtCoder】 ARC 102
    【AtCoder】 ARC 103
    20190814校内模拟赛
    「2019-8-13提高模拟赛」树 (tree)
    [PA2014]Fiolki
  • 原文地址:https://www.cnblogs.com/notfind/p/11517662.html
Copyright © 2011-2022 走看看