内置方法的补充
map 映射
map(func,可迭代对象) map对象
func()只可以有一个未知参数,可以有多个默认参数
map会将可迭代对象中的每一个值进行修改,然后映射到一个map对象中,再将对象转成元组或列表,只能转一次,取完就没有了,但是可以开辟一个新的空间,将map对象放进这个空间,然后就可以以这个新的空间对应的变量名对这个map对象进行多次转换
name_list = ['egon', 'jason', 'sean', 'tank', 'alex']
map_obj = map(lambda name: name + ' like milk' if name == 'tank' else name + ' like water', name_list)
# print(map_obj)
# print(list(map_obj))
# print(tuple(map_obj))
#将map_obj中的值取出,开辟新的空间给他,就可以多次反转
# new_obj = tuple(map_obj)
# print(new_obj)
# print(list(new_obj))
# print(''.join(new_obj)
print(tuple(list(map_obj)))
reduce 合并
首先使用它的时候,要去from functools import reduce
reduce(函数地址值,可迭代对象,初始值:默认为0)
函数地址值对应的函数方法最多只可以有两个未知参数
每次从可迭代对象中获取两个值进行合并
初始值:执行reduce函数时,都是从初始值开始合并
# 1——100累加的和
# for 循环来写:
init = 0
for line in range(1, 101):
init += line
print(init)
# reduce来实现
data = reduce(lambda x, y: x + y, range(1, 101),0)
print(data)
filter 过滤
filter(函数地址,可迭代对象)
filter 会将函数中返回的结果为True对应的参数值,过滤过来,过滤过来的值会添加到filter对象中
最多可以有一个未知参数
# 将后缀为.1的名字过滤过来
name_list = ['1.1','2.1','3.1','4.1','5.1','5.2']
filter_obj = filter(lambda name:name.endswith('.1'),name_list)
print(list(filter_obj))
函数递归
函数递归指的是重复‘直接调用或间接调用’函数本身,这是一种函数嵌套调用的表现形式
直接调用:指的是在函数内部,直接调用函数本身
间接调用:两个函数之间相互调用间接造成递归
python中有递归默认深度:限制递归次数998
这不是一个定值,在每一台操作系统中会根据硬盘来设置默认递归深度
import sys #获取操作系统的模块
获取递归深度:sys.getrecursionlimit().
设置递归深度:print(sys.setrecursionlimit(数值))
单纯的递归调用时没有任何意义的,想要有意义,必须遵循两个原则:
回溯:
指的是重要地执行,每一次执行 都要拿到一个更接近于结果地值,回溯必须要有一个终止条件
递推:
当回溯找到一个终止条件后,开始一步一步往上递推
def age(n):
if n == 1:
return 18
# 不写return无法递归
return age(n - 1) + 2
print(age(5))
26
什么是包:
包指的是内部包含_ init _.py的文件夹
包的作用:
存放模板,可以更好地管理模块
可以将项目拆分成一个个地功能,分别存放
模块
什么是模块:
模块是一系列的功能的结合体
模块包着一堆函数与代码
模块本质是一个个的。py文件
来源:
1.python内置的模快:python解释器的
sys,time,os,turtle
2.第三方的模块:(别人的)
requests
3.自定义的模块:(自己写的)
demo。py
模块的表现形式:
1.使用python编写的py文件
2.编译后的共享库,dll或c和c++的库
3.包下面带有_ init _.py的一组文件
为甚么要使用模块:
可以帮助我们更好的管理代码
如何创建,编写并使用模块?
创建py文件:
在py文件中写代码
在一个文件中,通过import关键字导入模块
import 模块名
ps :import 模块时,模块不能加.py后缀
1.在使用模板的阶段,必须要注意,谁是执行文件,谁是被导入文件
2.模块在导入时发生的情况:
会先执行当前的执行文件,并产生执行文件的名称空间
当执行到导入模块的代码时,被导入的模块也会产生名称空间
会将被导入的模块加载到内存中
模块的导入方式:
import 模块
from 包/模块 import 模块/函数名,变量名,类
给模块起别名:
import demo as d
模块在首次导入时,就已经固定好了,当前文件查找顺序是在内存中
循环导入问题:
model1.py
from model2 import name
name = 'jason'
model2.py
from model1 import name
name = 'sean'
解决循环导入问题:
1.需要查找的名字放在导入模块的上方
2.在函数内部导入,将模块变成函数名称
软件开发目录规范
1.conf:用于存放配置文件的文件夹
2.code:核心业务代码。py
3.interface:接口 接口内获取数据前的逻辑代码,通过后才能获取数据
4.db:用于存放文件数据
5.lib:存放公共功能
6.bin:存放启动文件
启动文件
7.log:用于存放日志文件,用于记录用户的操作记录
8.readme.txt:项目说明书