zoukankan      html  css  js  c++  java
  • python 19

    二分法

    算法:是高效解决问题的办法
    需求:有一个按照从小到大顺序排列的数字列表
    需要从该数字列表中找到我们想要的那个一个数字
    如何做更高效???

    方案一:整体遍历效率太低

    for num in nums:
        if num == find_num:
            print('find it')
            break
    

    方案二:二分法 list.sort()将列表排序

    面向过程的编程思想

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

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

    面向过程的编程思想应用场景解析:
    1、不是所有的软件都需要频繁更迭:比如编写脚本
    2、即便是一个软件需要频繁更迭,也不并不代表这个软件所有的组成部分都需要一起更迭

    匿名函数

    1、def用于定义有名函数
    func=函数的内存地址
    def func(x,y):
    return x+y

    print(func)

    2、lamdab用于定义匿名函数没名字的函数
    lambda x,y:x+y

    3、调用匿名函数,只用一次就放弃了
    内存地址+()
    方式一:
    res=(lambda x,y:x+y)(1,2)
    print(res)

    方式二:违背了匿名函数的初衷
    func=lambda x,y:x+y
    res=func(1,2)
    print(res)

    4、匿名用于临时调用一次的场景:更多的是将匿名与其他函数配合使用,用完就丢弃
    应用:

    salaries={
        'siry':3000,
        'tom':7000,
        'lili':10000,
        'jack':2000
    }
    res=max(salaries)
    # 返回tom
    
    res=max(salaries,key=lambda k:salaries[k])
    sorted(salaries,key=lambda k:salaries[k])
    
    

    map 生成器,filter过滤器 reduce合并器

    l=['alex','lxx','wxx','薛贤妻']
    new_l=(name+'_dsb' for name in l)# 
    res=map(lambda name:name+'_dsb',l)得到一个迭代器
    
    res=(name for name in l if name.endswith('sb'))
    res=filter(lambda name:name.endswith('sb'),l)得到一个迭代器
    
    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)
    

    模块

    1、什么是模块?
    模块就是一系列功能的集合体,分为三大类
    I:内置的模块
    II:第三方的模块
    III:自定义的模块
    一个python文件本身就一个模块,文件名m.py,模块名叫m

            ps:模块有四种形式
              1 使用python编写的.py文件
    
              2 已被编译为共享库或DLL的C或C++扩展
            
              3 把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)
            
              4 使用C编写并链接到python解释器的内置模块
    

    2、为何有用模块
    I:内置与第三的模块拿来就用,无需定义,这种拿来主义,可以极大地提升自己的开发效率
    II:自定义的模块
    可以将程序的各部分功能提取出来放到一模块中为大家共享使用
    好处是减少了代码冗余,程序组织结构更加清晰

    3.如何用模块
    模块导入发生3件事
    1,执行模块的代码
    2,产生名称空间,接模块运行过程中产生的名字放到该名称空间中。
    3,在当前文件中产生一个名字指向2产生的名称空间

    引用:import
    模块名.名字,是指名道姓地问某一个模块要名字对应的值,不会与当前名称空间中的名字发生冲突
    查看与修改都是模块本身,与调用位置无关

    5、import 。。。 as 。。。
    import abcdefgadfadfas as mmm

    6、模块是第一类对象

    7、自定义模块的命名应该采用纯小写+下划线的风格

    8、可以在函数内导入模块

  • 相关阅读:
    discuz_ucenter_api_for_java的中文问题
    java的编码问题详解
    java的泛型的技巧
    向maven中央仓库提交jar
    Java并发之FutureTask
    java并发之Semaphore
    centos中JDK版本冲突的问题
    C++中嵌入Python
    boost::python的使用
    c++调用python引号的问题
  • 原文地址:https://www.cnblogs.com/Franciszw/p/12578980.html
Copyright © 2011-2022 走看看