zoukankan      html  css  js  c++  java
  • 匿名函数 递归 二分法 面向过程编程


    什么是匿名函数?
    def定义的是有名函数:
    def func():#func=函数的内存地址
    pass

    匿名函数就是没有名字的函数:特点是只能在定义的时候使用一次


    为什么要用匿名函数?
    定义:
    匿名函数的定义就是相当于只产生一个变量的值,而没有绑定任何名字
    所以会在定义完成惠普被回收,无法重复使用,只能在定义时候使用一次
    应用:
    当某一个功能仅仅使用一次就没有再重复使用的必要了,就应该定义称匿名函数

    如何使用匿名函数( def sum2(x,y)
    return x+y )
    lambda x,y:x+y
    调用(lambda x,y:x+y)(1,2)

    举例:
    salaries={'egon':3000,
    'alex':100000,
    'wupeiqi':10000,
    'yuanhao':2000
    }
    #比较出字典中薪资最高的人的名字

    #key=函数的内存地址:作用是控制max函数的比较的值
    # def func(k):
    # return salaries[k]
    # print(max(salaries,key=func))
    #将可迭代对象salaries百年城迭代器对象iter_obj
    #next(iter_obj)得到一个人名,然后将该人名当参数传给key制定的函数,
    # 然后调用函数,将函数的返回值当作比较依据
    print(max(salaries,key=lambda k:salaries[k]))


    #map 添加,映射成新值
    names=['alex','wupeiqi','yuanxiao','kevin','hu老师']
    names_new=[]
    #方法1.手动实现 for循环
    for name in names:
    names_new.append(name+'dss')
    print(names_new)
    #方法2.列表生成式
    names_new=[name+'abs'for name in names]
    print(names_new)
    #方法3.map+匿名函数
    res=map(lambda x:x+'dds',names)
    print(list(res))

    #redce相加
    #方法1.手动实现 for循环
    res=0
    for i in range(101):
    res+=i
    print(res)
    #方法2.列表生成式
    print(sum([i for i in range(101)]))
    #方法3.map+匿名函数
    from functools import reduce
    reduce(lambda x,y:x+y,[i for i in range(101)],100)#此时初始值101
    reduce(lambda x,y:x+y,[i for i in range(101)])#此时初始值是range的第一个值


    #filter过滤
    names=['alex_sb','wupeiqi','yuanxiao_sb','kevin','hu老师']
    #方法1.手动实现 for循环
    for name in names:
    if name.endswith('sb'):
    names_new.append(name)
    print(names_new)
    #方法2.列表生成式
    names_new=[name for name in names if name.endswith('sb')]
    print(names_new)

    #方法3.map+匿名函数(可迭代器对象)
    res=filter(lambda name:name.endswith('sb'),names)
    print(list(res))




    什么是函数的递归调用?
    函数的递归调用是函数嵌套调用的一种特殊形式,
    特殊在调用函数的过程中有直接或间接的调用了该函数本身
    递归本质就是一个循环的过程,但是递归必须满足两个原则
    1.每次进入下一层递归,问题的规模必须有所减少
    2.递归必须要有一个明确的结束条件或者说有一个明确的进入下一层递归的条件,
    并且递归有两个明确的阶段
    1.回溯:一层一层的递归调用下去
    2.递推:在耨一层结束掉递归,然后一层一层的返回

    为什么要使用递归调用?
    在就某些情况下,基于递归调用会比while循环更简单好用一些

    如何要用递归调用?
    例子:
    list1=[1,[2,[3,[4,[5,[6,[7,[8,[9,]]]]]]]]]
    list_11=[]
    def age(l):
    for i in l :
    if type(i) is list:
    return age(i)
    else:
    list_11.append(i)
    print(list_11)
    print(age(list1))



    二分法:二分法是算法的一种,可以有效的找寻有序列表中的数字
    举例子:
    nums=[1,3,6,9,14,56,88,99]
    def run(i,nums):
    if len(nums)==0:
    print('jjj')
    return
    mid=len(nums)//2
    if i>nums[len(nums)//2]:
    nums=nums[mid+1:]
    run(i,nums)
    if i<nums[len(nums)//2]:
    nums=nums[:mid]
    run(i,nums)
    else:
    print('yy')
    run(14,nums)





    面想过程编程:
    核心是过程而子,过程是指解决问题的步骤,即先干什么再干什么后干什么...
    基于该思想编写的程序脑子里应该始终思考过程二字,就奥比再设计一条流水
    线,是一种机械式的思维方式

    优点:复杂的问题的流程化,进而简单化
    缺点:扩展性差

  • 相关阅读:
    问题:弹窗还没点击确认就执行了跳转
    关于版本的问题
    timeUtil
    使用jframe编写一个base64加密解密工具
    JMeter 命令行(非GUI模式)详解(一)-分布式(远程)执行脚本及查看指定结果、日志
    jmeter分布式压测 java.io.FileNotFoundException: rmi_keystore.jks (系统找不到指定的文件。)
    mysql5.7日志时间与系统时间不一致
    mysql查看执行sql语句的记录日志
    Appium如何获取appPackage和appActivity
    关于测试设置
  • 原文地址:https://www.cnblogs.com/yanhui1995/p/9766472.html
Copyright © 2011-2022 走看看