zoukankan      html  css  js  c++  java
  • python--004--函数(匿名函数、高阶函数)

    1. 匿名函数:

    print(lambda x:x+1)
    func = lambda x:x+1
    print(func(10))
    
    name = "wendy"
    func=lambda x:x+'_max'
    res=func(name)
    print('匿名函数运行的结果',res)

    lambda 一般不把它赋值给变量,lambda x:x+'_max',一般直接和其他函数一起用,上面用法只是举例解释,匿名函数单独是如何用和运行的

    lambda返回多个值:

    # lambda 返回多个值
    f = lambda x,y,z:(x+1,y+1,z+1)
    print(f(1,2,3)

     

     

    2. 编程的方法论:

    面向对象

    面向过程:将一个大的问题分解成小的问题
    函数式编程:函数式=编程语言定义的函数+数学意义的函数

      结合数学模型 y = 2*x+1
      def cal(x):
        return 2*x+1

    函数式编程可读性差,python不是严格意义上的函数式编程语言
    hashell、clean erlang 纯函数式编程的语言

    1.1 函数式编程尾递归调用优化

    特征: 1.不可变数据  2.第一类对象  3.尾调用优化(尾递归)

      eg1:不可变:不用变量保存状态,不修改变量

    #非函数式 ,函数体中可能存在global等,或是赋值的操作
    a = 1
    def incr_test1():
        global a
        a +=1
        return a
    incr_test1()
    print(a)
    # 函数式
    n = 1
    def incr_test2(n):
        return n+1
    print(incr_test2(2))
    print(n)

     

    eg2: 第一类对象:函数即“变量”
    1.函数名可以当作参数传递
    2.返回值可以是函数名

     

    高阶函数,满足下列两个条件之一,就是高阶函数
    1)把函数当作参数传给另一个函数

    2)返回值中包含函数

    #1)把函数当作参数传给另一个函数
    def foo(n):
        print(n)
    def bar(name):
        print('my name is %s'%name)
    
    foo(bar)
    foo(bar('wendy'))
    
    
    -------
    #2)返回值中包含函数
    def bar():
        print('from bar')
    def foo():
        print('from foo')
        return bar
    n = foo()
    n()
    
    def test1():
        print('from test1')
    
    def test2():
        print('from test2')
        return test1()    # 这相当于将test1的返回值拿来return

     

    eg3: 尾调用:在函数的最后一步调用另一个函数(最后一行不一定是函数的最后一步)

      调用后,该函数已经执行完,不需要等待执行结果,优化递归中要等待结果导致栈溢出

    # 函数bar在foo内为尾调用
    def bar(n):
        return n
    def foo(x):
        return bar(x)
    
    # 函数bar在foo内为非尾调用
    def bar(n):
        return n
    def foo(x):
        return bar(x)+1
    
    # 函数bar在foo内为非尾调用
    def bar(n):
        return n
    def foo(x):
        y = bar(x)
        return y

     

     

  • 相关阅读:
    AcWing 143. 最大异或对
    分组异或
    Java面向对象的思维导图
    数组中超过一半的元素
    SQL带事务的存储过程添加功能
    分页存储过程MYSQL
    文件夹的压缩
    邮箱发送文件
    SQL万能存储过程分页
    Api反射泛型添加
  • 原文地址:https://www.cnblogs.com/jinf/p/10587681.html
Copyright © 2011-2022 走看看