函数补充与模块

内置函数补充:

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:
- 项目说明书, 用户告诉使用者项目的操作

猜你喜欢

转载自www.cnblogs.com/xy-han/p/11867236.html
今日推荐