目录
一. 二分法
一.二分法=>算法
二.面向过程编程思想一、编程思想/范式
二、面向过程面向过程的编程思想
三、函数式
一. 匿名函数与lambda
二. map、reduce、filter(了解)
三.sorted、max、min
四、模块的介绍
一. 什么是模块
二.为何要有模块
三、模块的使用
2.1 import语句
一.二分法
一.二分法=>算法
-
算法就是高效解决问题的方法
# 需求:有一个按照从小到大顺序排列的数字列表 # 需要从该数字列表中找到我们想要的那一个数字 # 如何做更高效? # 方案一:整体遍历效率太低 nums=[-3, 4, 7, 10, 13, 21, 43, 77, 89] find_num = 89 for num in nums: if num == find_num: print('find it') break # 方式二:二分法 ''' # 逻辑分析,写出伪代码 def binary_search(find_num, 列表): mid_val = 找列表中间的值 if find_numm > mid_val: # 接下来的查找应该是在列表的右半部分 列表=列表切片右半部分 本身的代码(列表) elif find_num < mid_val: # 接下来的查找应该是在列表的左半部分 列表=列表切片左半部分 本身的代码(列表) else: print('find it') ''' nums=[-3, 4, 7, 10, 13, 21, 43, 77, 89] def binary_search(find_num, l): if len(l) == 0: return print("不存在该值") mid_index = len(l)//2 mid_val = l[mid_index] if find_num > mid_val: # 接下来的查找应该是在列表的右半部分 new_list = l[mid_index+1:] binary_search(find_num, new_list) elif find_num < mid_val: # 接下来的查找应该是在列表的左半部分 new_list = l[:mid_index] binary_search(find_num, new_list) else: print('find it') binary_search(93., nums)
二.面向过程编程思想
一、编程思想/范式
-
编程范式指的就是编程的套路,打个比方,如果把编程的过程比喻为练习武功,那编程范式指的就是武林中的各种流派
二、面向过程
面向过程的编程思想
-
核心:“过程”二字,过程即流程,指的是做事的步骤:先、再、后
-
基于该思想编写程序就好比在设计一条流水线
-
优点:能将复杂的问题流程化、进而简单化
-
缺点:扩展性非常差
'''
面向过程的编程思想应用场景解析:
1、不是所有的软件都需要频繁更迭:比如编写脚本
2、即便是一个软件需要频繁更迭,也并不代表这个软件所有的组成部分都需要一起更迭
'''
三、函数式
一. 匿名函数与lambda
1 # 1、def用于定义有名函数 2 # func=函数的内存地址 3 def func(x, y): 4 return x+y 5 print(func) 6 7 # 2、lambda用于定义匿名函数 8 print(lambda x,y:x+y) 9 10 # 3、调用匿名函数 11 # 方式一: 12 res=(lambda x,y:x+y)(1, 2) 13 print(res) 14 15 # 方式二: 16 func = lambda x,y:x+y 17 res=func(1,2) 18 print(res) 19 20 # 4、匿名用于临时调用一次的场景:更多的是将匿名函数与其他函数配合使用
二. map、reduce、filter(了解)
1 # map的应用(了解) 2 l=['alex','lxx','wxx','egon'] 3 new_l = (name+'_dsb' for name in l) 4 print(new_l) 5 6 res = map(lambda name:name+'_dsb',l) 7 print(res) # 生成器 8 9 # filter的应用(了解) 10 l=['alex_sb','lxx_sb','wxx_sb','egon_sb'] 11 res = (name for name in l if name.endswith('sb')) 12 13 res = filter((lambda name:name.endswith('sb')),l) 14 print(res) 15 16 # reduce的应用(了解) 17 from functools import reduce 18 # 数字的合并操作 19 res = reduce(lambda x,y:x+y,[1,2,3],10) 20 21 # 字符串的合并操作 22 res = reduce(lambda x,y:x+y,['a','b','c'],'hello') 23 print(res)
三.sorted、max、min
1 salaries={ 2 'siry':3000, 3 'tom':7000, 4 'lili':10000, 5 'jack':2000 6 } 7 # 需求1:找出字典中薪资最高的人=>lili 8 # def func(k): 9 # return salaries[k] 10 # res = max(salaries, key=func) # 返回值=func('siry') 11 # print(res) 12 # max的应用 13 res = max(salaries, key=lambda k:salaries[k]) 14 print(res) 15 # 需求2:找出字典中薪资最低的人=>jack 16 # min的应用 17 res = min(salaries, key=lambda k:salaries[k]) 18 print(res) 19 20 # 需求3:将字典中的人名按照薪资从低到高的顺序进行排列 21 # sorted的应用 22 # reverse=True 将排序从大到小排列,默认为从小到大排列 23 res = sorted(salaries, key=lambda k:salaries[k]) 24 print(res)
四、模块的介绍
一. 什么是模块
模块就是一系列功能的集合体,分为三大类
-
1.1.1 内置的模块
-
1.1.2 第三方模块
-
1.1.3 自定义模块
-
一个python文件本身就是一个模块,文件名m.py,模块名叫m
-
-
了解:模块分为四种形式
'''
1、使用python编写的.py文件
2、已被编译为共享库或DLL的c或c++扩展
3、把一系列模块组织到一起的文件夹(注:文件夹下有一个__init__.py文件,该文件夹称之为包)
4、使用c编写并链接到python解释器的内置模块
'''
二.为何要有模块
-
内置与第三方的模块拿来就用,无需定义,可以极大的提升自己的开发效率
-
自定义模块:可以将程序的各部分功能提取出来放到一个模块中为大家共享使用,减少代码冗余,程序组织结构更加清晰
三、模块的使用
2.1 import语句
1 import 模块名 2 # 1、首次导入模块会发生3件事 3 # 1、执行foo.py 4 # 2、产生foo.py的名称空间,将foo.py运行过程中产生的名字都丢到foo的名称空间中 5 # 3、在当前文件中产生的有一个名字foo,该名字指向2中产生的名称空间 6 # 之后的导入,都是直接引用首次导入产生的foo.py名称空间,不会重复执行代码(即不会重复导入同一模块) 7 8 # 2、引用: 9 # print(foo.x) 10 # print(foo.get) 11 # print(foo.change) 12 # 强调1:模块名.名字,是指名道姓地问某一个模块要名字对应的值,不会与当前名称空间中的名字发生冲突 13 # 强调2:无论是查看还是修改操作的都是模块本身,与调用位置无关 14 15 # 3、可以以逗号为分隔符在一行导入多个模块(不建议在一行同是导入多个模块) 16 # 4、导入模块的规范 17 #I. python内置模块 18 #II. 第三方模块 19 #III. 程序员自定义模块 20 import time 21 import sys 22 23 import 第三方1 24 25 import 自定义模块1 26 # 5、import 。。。 as 。。。 27 import foo as f # f=foo 28 f.get() 29 30 # 6、模块是第一类对象 31 32 # 7、自定义模块的命名应该采用纯小写+下划线的风格 33 34 # 8、可以在函数内导入模块 35 def func(): 36 import foo