• 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

     

     

  • 相关阅读:
    SPI(1)——Documentation/spi/spi_summary.txt翻译
    TCP协议详解(TCP报文、三次握手、四次挥手、TIME_WAIT状态、滑动窗口、拥塞控制、粘包问题、状态转换图)
    Linux设备树(3)——Linux内核对设备树的处理
    Linux设备树(2)——设备树格式和使用
    [转]Android的taskAffinity
    [转]深入了解iPad上的MouseEvent
    NG2入门
    TypeScript 素描
    TypeScript 素描
    TypeScript 素描
  • 原文地址:https://www.cnblogs.com/jinf/p/10587681.html
Copyright © 2020-2023  润新知