zoukankan      html  css  js  c++  java
  • 面向过程编程和匿名函数

    1. 二分法

    1.1 什么是算法

    ​ 算法是一种高效解决问题的办法

    1.2 二分法

    # 需求:有一个按照从小到大顺序排列的数字列表
    #      需要从该数字列表中找到我们想要的那个一个数字
    #      如何做更高效???
    nums=[-3,4,7,10,13,21,43,77,89]
    find_num=10
    
    nums=[-3,4,13,10,-2,7,89]
    nums.sort()
    print(nums)
    
    # 方案一:整体遍历效率太低
    for num in nums:
        if num == find_num:
            print('find it')
            break
    # 方案二:二分法
    nums=[-3,4,7,10,13,21,43,77,89]
    find_num=8
    def binary_search(find_num,l):
        print(l)
        if len(l) == 0:
            print('找的值不存在')
            return
        mid_index=len(l) // 2
    
        if find_num > l[mid_index]:
            # 接下来的查找应该是在列表的右半部分
            l=l[mid_index+1:]
            binary_search(find_num,l)
        elif find_num < l[mid_index]:
            # 接下来的查找应该是在列表的左半部分
            l=l[:mid_index]
            binary_search(find_num,l)
        else:
            print('find it')
    
    binary_search(find_num,nums)
    

    2. 面向过程编程

    2.1 编程思想/范式

    ​ 编程思想指的就是编程的套路,编程思想本身并没有高低之分,而在于使用者本身

    2.2 面向过程的编程思想

    • 核心是"过程"二字,过程即流程,指的是做事的步骤:先什么、再什么、后干什么
    • 基于该思想编写程序就好比在设计一条流水线

    2.3 优缺点

    优点:

    复杂的问题流程化、进而简单化

    缺点:

    扩展性非常差

    2.4 面向过程的编程思想应用场景解析

    • 不是所有的软件都需要频繁更迭:比如编写脚本
    • 即便是一个软件需要频繁更迭,也不并不代表这个软件所有的组成部分都需要一起更迭

    3. 匿名函数

    3.1 定义匿名函数

    • def用于定义有名函数

      func=函数的内存地址
      def func(x,y):
          return x+y
      
    • lamdab用于定义匿名函数

      print(lambda x,y:x+y)
      

    3.2 调用匿名函数

    方式一:(不常用)

    res=(lambda x,y:x+y)(1,2)
    print(res)
    

    方式二:(可以用,但是没有意义)

    func=lambda x,y:x+y
    res=func(1,2)
    print(res)
    

    匿名用于临时调用一次的场景:更多的是将匿名与其他函数配合使用

    3.3 匿名函数的应用

    3.3.1 max方法的应用

    salaries={
        'siry':3000,
        'tom':7000,
        
        'lili':10000,
        'jack':2000
    }
    # 需求1:找出薪资最高的那个人=》lili
    res=max([3,200,11,300,399])
    print(res)
    
    res=max(salaries)
    print(res)#比较的是key的值
    #为此我们可以定义一个函数,来表示值
    def func(k):
        return salaries[k]
    res=max(salaries,key=func) # 返回值=func('siry')
    print(res)
    #lambda k:salaries[k],以这个标准来执行
    res=max(salaries,key=lambda k:salaries[k])
    print(res)
    

    3.3.2 min方法的应用

    # ========================min的应用
    res=min(salaries,key=lambda k:salaries[k])
    print(res)
    

    3.3.3 sorted方法的应用

    res=sorted(salaries,key=lambda k:salaries[k],reverse=True)
    print(res)
    

    3.3.4 map方法的应用(了解)

    l=['alex','lxx','wxx','薛贤妻']
    new_l=(name+'_dsb' for name in l)
    print(new_l)
    
    res=map(lambda name:name+'_dsb',l)
    print(res) # 生成器
    

    3.3.5 filter方法的应用(了解)

    l=['alex_sb','lxx_sb','wxx']
    res=(name for name in l if name.endswith('sb'))
    print(res)
    
    res=filter(lambda name:name.endswith('sb'),l)
    print(res)
    

    3.3.6 reduce方法的应用(了解)

    from functools import reduce
    res=reduce(lambda x,y:x+y,[1,2,3],10) # 16
    print(res)
    
    res=reduce(lambda x,y:x+y,['a','b','c']) # 'a','b'
    print(res)
    

    函数知识的补充

    类型提示 Type hinting(最低 Python 为 3.5)

    #Python是一种强类型的动态语言
    #可以:+类型,规定传入值的类型,本质上:后是添加的提示信息,可以根据需要填写
    #->int 规定返回值的类型
    #虽然规定了传入类型,但实际上还是可以传入其他类型的,传入值的规范
    def register(name:str,age:int,hobbbies:tuple)->int:
     print(name)
     print(age)
     print(hobbbies)
     return 111
    
    register(1,'aaa',[1,])
    #可以添加默认值,默认值在类型后面添加
    def register(name:str='egon',age:int=18,hobbbies:tuple=(1,2))->int:
     print(name)
     print(age)
     print(hobbbies)
     return 111
    register()
    res=register('egon',18,('play','music'))
    

    1585325998024

  • 相关阅读:
    【深度强化学习】Curriculum-guided Hindsight Experience Replay读后感
    【深度学习】perceptron(感知机)
    【深度学习】基础--NumPy
    【RMAN】一些参数温故知新
    初识Kotlin之函数
    初识Kotlin之变量
    编程和英语一起学,每日一词
    SpringBoot注册Windows服务和启动报错的原因
    从Docker 到Jenkins 到Ansible的部署经验
    IDEA 常用配置
  • 原文地址:https://www.cnblogs.com/Henry121/p/12575932.html
Copyright © 2011-2022 走看看