内置函数补充:
map:映射
map(func, 可迭代对象)---->map对象
map会将可迭代对象中的每一个值进行修改,然后映射在一个map对象中,可以再将map对象转换成列表/元组,
需要注意的是只能转一次(原因是取一次后生成器就被取完了)
#map 映射 name_list = ['egon', 'jason', 'sean', '大饼', 'tank'] map_obj = map(lambda x:x+'_dsb' if x != 'tank' else x+'喜欢吃生蚝', name_list) print(map_obj) #map_obj可以变成list/tuple类型 print(list(map_obj)) #map_obj---->生成器(迭代器)----》用完后,不能再取了 print(tuple(map_obj))
reduce:合并
在使用时首先需要调用reduce模块
from functools import reduce
每次从可迭代对象中获取两个值进行合并,执行reduce函数都是从初始值开始合并
reduce(函数地址, 可迭代对象,初始值(默认是0))
#reduce 合并 from functools import reduce print(reduce(lambda x, y: x+y, range(1, 101), 0)) 结果: 5050
filter:过滤
filer(函数地址, 可迭代对象)---->filter对象
filter会将函数中返回的结果为True对应的参数值过滤出来,过滤出来的值会添加到filter对象中
xx_dsb.endswith('_dsb'):返回True or False
#filter 过滤 name_list = ['egn_dsb', 'jason_dsb', 'sean_dsb', '大饼_dsb', 'tank'] filter_obj = filter(lambda name: name.endswith('_dsb'), name_list) print(filter_obj) print(list(filter_obj)) print(tuple(filter_obj)) #空元组,已经被上面列表取完了
函数递归(了解):
函数递归指的是重复“直接或间接”调用函数本身,这是一种函数嵌套调用的表现形式
直接调用:指的是函数内置,直接调用函数本身
间接调用:两个函数之间相互调用间接造成递归
了解:
Python中递归默认深度:998,1000(限制递归次数)
但是在每一台操作系统中都会根据硬盘来设置默认的递归深度
import sys #获取操作系统资源的模块
获取递归深度:print(sys.getrecursionlimit())
设置递归深度:print(sys.setresursionlimit(2000))(深度值)
#查看当前递归深度值
注:单独的递归调用时没有任何意义的
想要递归有意义,必须要遵守两个条件:
-回溯:
指的是重复地执行,每一次执行都要拿到一个更接近于结果的结果,回溯必须要有一个终止条件
-递推:
当回溯找到一个终止条件后,开始一步一步往上递推
age5 =age4 + 2 age4 = age3 + 2 age3 = age2 +2 age2 = age1 +2 age1 =18 #回溯终止的结果
#result = age(n-1)+2
从上往下是回溯过程,从下往上是递推过程
def age(n): if n ==1: return 18 return age(n-1)+2 #必须要写return才能实现递推 age()
模块
什么是模块?
模块是一系列功能的结合体
模块本质上是一个个的py文件#相当于模块包着一堆函数与代码
模块的来源:
1、Python内置的模块(Python解释器的)
比如:sys/time/os/tutle
2、第三方模块(别人写的)
比如:request
3、自定义的模块(自己写的)
比如:自己定义的demo.py文件
模块的表现形式:
1、使用Python编写的py文件(了解)
2、编译后的共享库DLL或者是C或C++库(了解)
3、包下面带有_lnit_.py的一组py文件
-py_demo
-_init_.py
-demo.py
-demo2.py
什么是包?
包指的是内部含有__init__.py文件夹
Python解释器下的py文件:
1)Python解释器下的文件夹
2)一个个的py文件
二 为什么要使用模块?
模块可以帮我们更好地管理功能代码,比如: 函数...
可以将项目拆分成一个个的功能,分别存放在不同的py文件(模块)中。
三 如何创建,编写模块,并使用模块?
- 鼠标右键创建py文件
- 在py文件编写python代码
- 在一个文件中,通过import关键字导入模块
import 模块名
# 注意: import 模块时,模块不能加.py后缀
- 在使用模块阶段,必须要注意,谁是执行文件,谁是被导入文件(被导入的模块)
- 模块在首次导入时,就已经固定好了,当前文件查找的顺序是先从内存中查找
- 模块在导入时发生的事情:
1.会先执行当前执行文件,并产生执行文件中的名称空间。
2.当执行到导入模块的代码时,被导入的模块会产生一个模块的名称空间。
3.会将被导入模块的名称空间加载到内存中。
- 给模块起别名 as
import 模块 as 模块的别名
- 模块的导入方式
- import 模块
- 在执行文件中直接import导入
- from 包/模块 import 模块/(函数名、变量名、类名)
- 在执行文件中直接import导入
- 循环导入问题:
- model1.py from model2 import name name = 'jason' - model2.py from model1 import name name = 'tank'
- 解决循环导入问题:
1.需要查找的名字放在导入模块的上方
2.在函数内部导入,将模块变成函数名称空间中的名字
- 软件开发目录规范:
注意: 每一次写项目时,都要新建一个文件夹与项目工程,必须让项目文件夹作为项目根目录。
- 项目的文件夹
- conf:
- 用于存放配置文件的文件夹
- core:
- 核心业务代码 .py
- interface:
- 接口, 接口内写获取数据前的逻辑代码,通过后才能获取数据
- db:
- 用于存放文件数据
- lib:
- 存放公共功能文件
- log:
- 用于存放日志文件,日志用于记录用户的操作记录
- bin:
- 里面存放启动文件 / - 启动文件
- readme.txt:
- 项目说明书, 用户告诉使用者项目的操作