• 第六章 函数[DDT书本学习 小甲鱼]【3】


    6.5 lambda表达式 谐音:懒不嗒?lam-b-da 匿名函数
    代码
    def my(x):
    teturn 2*x+1
    e=my(5)
    print(e)
    ---------------------
    11
    如果使用lambda语句来定义,会是这样
    lambda x:2*x+1 返回的是一个函数对象
    进行使用,代码如下
    g=lambda x:2*x+1
    print(g(5))
    ------------------------
    11
    =========================================================
    练习修改普通函数为匿名函数
    def add(x,y):
    return x+y
    print(add(3,4))
    ------------ 修改后 -----------
    g=lambda x,y:x+y
    print(g(3,4))
    总结,lambda函数的作用
    1)写一些执行脚本时候,省下定义过程,可以使得代码更加精简。
    2)程序执行只需要调用少数次,起名头疼,可以不必考虑命名问题。
    3)简化代码可读性。

    介绍两个BIF filter()和map()
    1.filter() 俗称过滤器 2个参数,前面为None或者函数,后面为迭代数据,将
    后面的每个元素作为函数的参数进行计算,把返回为True的值筛选出来。
    代码如下
    temp=filter(None,[1,0,True,False])
    print(list(temp))
    -------------运行结果-------------
    [1,True]
    利用这个BIF,尝试写一个筛选奇数的过滤器
    def fun(x):
    return x%2
    temp=filter(fun,range(10))
    print(temp)
    -----------------------------------
    [1,3,5,7,9]
    ===============================================
    学习了lambda后,可以简化为一行
    print(list(filter(lambda x:x%2,range(10))))

    2.map() 不是地图的意思,映射。将每个元素进行处理。
    print(list(maplambda x:x*2,range(10))))
    -------------------------------------------
    [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

    6.6递归
    6.6.1递归是什么?从原理上来讲就是函数调用自身的这么一个行为。
    代码例子
    def fun():
    fun()
    fun()
    可以无限循环下去,Python处于善意保护,限制了1000层。
    设置递归深度的限制方法如下
    import sys
    sys.setrecursionlimit(100000)
    6.6.2写一个求阶乘的函数
    def jc(x):
    k=x
    for i in range(1,x):
    k*=i
    return k
    e=int(input("请输入一个整数:"))
    d=jc(e)
    print("【%d】的阶乘结果是:【%d】"%(e,d))
    -------------------------------------------------
    请输入一个整数:5
    【5】的阶乘结果是:【120】
    普通的函数实现,大家都会,再来看看递归版本的代码
    def myfun(n):
    if n==1:
    return 1
    else:
    return n*myfun(n-1)
    ------------以上是递归写法-------------------
    e=int(input("请输入一个整数:"))
    d=myfun(e)
    print("【%d】的阶乘结果是:【%d】"%(e,d))
    ================================================
    递归的条件 1.调用函数本身 2.设置了正确的返回条件
    6.6.3 这帮兔崽子 斐波那契数列Fibonacci
    月数1 2 3 4 5 6 7 8 9
    对数1 1 2 3 5 8 13 21 34
    ---------------------------------------------------
    数学函数定义为 n=1时 f(n)=1
    n=2时 f(n)=1
    n>2时 f(n)=f(n-1)+f(n-2)
    题目:20个月后,共有多少对兔子?
    ==========================================
    迭代实现代码如下
    def tuzi(n):
    a1=1
    a2=1
    a3=1
    if n<1:
    print("输入有误!")
    return -1
    while n>2:
    a3=a1+a2
    a1=a2
    a2=a3
    n-=1
    return a3
    b=tuzi(20)
    if b!=-1:
    print("20个月后一共有%d对兔子"%b)
    ----------------------------------------
    20个月后一共有6765对兔子
    =======================================================
    递归实现代码如下
    def tu(n):
    if n<1:
    print("你的输入有误")
    return -1
    if n==1 or n==2:
    return 1
    else:
    return tu(n-1)+tu(n-2)
    jieguo=tu(20)
    if jieguo!=-1:
    print("20个月后一共有%d对兔子"%jieguo)
    ----------------------------------------
    20个月后一共有6765对兔子
    ============== 递归有优势 也有劣势 必须使用得当 ====================
    6.6.4 汉诺塔【难点,未突破,放置......】
    代码如下
    def hnt(n,x,y,z)
    if n==1:
    print(x,"------->",z) #如果只有一层,直接从x移动到z
    else:
    hnt(n-1,x,z,y)#将前n-1个盘子从X移动到Y上
    print(x,"------->",z)将#最底下的第64个盘子从X移动到Z上
    hnt(n-1,y,x,z)将#Y上的63个盘子移动到Z上
    n=int(input("请输入汉诺塔的层数:"))
    hnt(n,"X","Y","Z")

    Daodantou:“不积跬步,无以至千里.”
  • 相关阅读:
    软件测试理论提炼
    测试左移与右移
    RFS工具基础学习
    机遇——沃特&#183;马龙
    SVN (Subversion+tortoiseSVN)使用手册
    MongoDB基本使用
    win7系统快捷键操作大全
    SQL Server Profiler使用方法
    转载《soapUI 学习日志》
    HTMLTestRunner中文测试报告
  • 原文地址:https://www.cnblogs.com/daodantou/p/10317692.html
Copyright © 2020-2023  润新知