zoukankan      html  css  js  c++  java
  • 20、面向函数与匿名函数及模块

    一、算法之二分法

      算法是一种快速解决问题的方法

      前提:有一个按照顺序排列的列表

         需要从里面取出我们需要的值

    1.1、已知

    nums=[-3,4,7,10,13,21,43,77,89]
    find_num=10

    1.2、已学方法    通过循环遍历全部元素找到值,效率低

    for num in nums:         #循环取值
        if num == find_num:       #判断是否为目标值
            print('find it')         
            break

    1.3、二分法

    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.1、面向过程的编程思想

      核心是过程两个字,过程就是流程,指的是先做什么,后做什么

      基于思想编程写程序就好比设计一条流水线

    2.2、优缺点

      优点:复杂问题流程化,简单化

      缺点:扩展性差

    2.3、面向过程的编程思想应用场景

      不是所有的软件编程都需要频繁更迭,比如写脚本

      即便是一根程序需要频繁更迭,也不代表这个软件需要需求全部都要更迭

    三、匿名函数

    3.1、lambda和def的区别  

      def适用于有定义的函数

      而没有定义的函数就是用lambda

    def func(x,y):
        return x+y    
    #也可以用lambda
    print(lamdab x,y:x+y)

    3.2、调用匿名函数

    3.2.1、方式一  使用print调用

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

    3.2.2、方式二:通常匿名函数是使用通过其他函数调用

    func=lambda x,y:x+y
    res=func(1,2)   #通过函数赋值
    print(res)

    四、匿名函数的使用

    4.1、找出薪资最高的那个人     内置函数max的应用

    salaries={
        'siry':3000,
        'tom':7000,
        'lili':10000,
        'jack':2000
    
    res=max(salaries,key=lambda k:salaries[k])
    print(res)
    #     内置函数max,先遍历变量salaries,去出值。
                               再四设定匿名函数key=lambda  K      k为变量
                                最后return salaries[k]          取出value给匿名函数

    4.2、薪资最低的人       内置函数min的应用

    res=min(salaries,key=lambda k:salaries[k])
    print(res)

    4.3、排序             按照从小到大的顺序排列sorted

            从大到小则是反序,末尾加上reverse=True

    res=sorted(salaries,key=lambda k:salaries[k])
    print(res)        #正序 从小到大
    res=sorted(salaries,key=lambda k:salaries[k],reverse=True)
    print(res)          #  反序 从大到小

    4.4、  简化for循环    map的使用(了解)

    l=['alex','lxx','wxx','薛贤妻']
    new_l=(name+'_dsb' for name in l)   #方案一
    print(list(new_l))
    
    res=map(lambda name:name+'_dsb',l)   #方案二  map简化for循环
    print(res) # 生成器

    4.5、  if判断      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)   # 代替if判断  True
    print(res)
    #输出的都是生成器

    4.6、  合并    refuce的应用(了解)

    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)      #合并字符,变成字符串

    五、模块

    5.1、什么是模块

      模块是一系列功能的集合体,分为三类

      1.内置模块

      2.第三方模块

      3.自定义模块

    5.2、模块的四种形式

      1.使用python编写的.py文件,例如:文件名为m.py,模块名为m

      2.已经编译好的共享库或者用DLL的c或者c++扩展  (不常用)

      3.把一系列的模块组织到一个文件夹内,文件夹内必须有__init__.py的文件,该文件夹称为包

      4.用c语言编写,并且连接到Python解释器的内置模块

    5.3、为什么要有模块

      1.内置的模块以及第三方模块,无需定义,可以直接使用,可以极大的提升开发效率

      2.自定义模块:可以将程序内的部分功能提取到一个模块中,为其他函数共用

             减少了代码冗余,程序更加清晰

    5.4、怎么使用模块

      1.使用impot  模块名,引用

    5.5、模块名的定义

      和变量名一样,使用小写加上下划线组成

    5.6、可以在函数内倒入模块

    def func():
        import foo

            

  • 相关阅读:
    WSL+vscode安装rust注意事项
    几种判断质数的算法
    select被遮挡问题
    idea工具使用
    docker部署nexus服务
    docker部署nacos
    springcloudAlibaba整合nacos
    Navicat_Premium_v15 激活
    CF295D Solution
    CF351B Solution
  • 原文地址:https://www.cnblogs.com/jingpeng/p/12577468.html
Copyright © 2011-2022 走看看