+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2019-08(106)

2019-09(105)

2019-10(7)

2019-11(8)

2019-12(13)

2020-01(23)

2020-02(22)

内置函数补充,函数递归,模块

发布于2020-01-01 11:23     阅读(1011)     评论(0)     点赞(21)     收藏(1)


内置函数的补充,递归,以及模块

一、内置函数的补充

'''
map: 映射
    map(函数地址, 可迭代对象) ---> map对象
    map会将可迭代对象中的每一个值进行修改,然后映射一个map对象中,
    可以再将map对象转换成列表/元组。(以第一次要转的类型为主)
    注意: 只能转一次。

reduce: 合并
    reduce(函数地址, 可迭代对象, 初始值默认为0)
    reduce(函数地址, 可迭代对象, 初始值)

filter: 过滤
    filter(函数地址, 可迭代对象) --> filter 对象
'''

1、map
    用法:map(函数地址,可迭代对象)--->map对象(本质是一个生成器即迭代器)
    通过print(list(map对象))显示或for循环显示内容,但注意的是这个map对象只能够使用一次,即谁    先用就显示出来,第二次就没这个对象了,只能够得到一个空的值比如()或[]
    
a、通过list(map对象显示)   
name_list = ['sean', 'egon', 'jason', 'tank', 'yafeng']
map_obj = map(lambda name: name + '666' if name == 'yafeng' else name + '_大宝剑', name_list)#得到一个map对象
print(map_obj)
>>> <map object at 0x000002855AC051C8>
print(list(map_obj))#map_obj ---> 生成器(迭代器) ----> 返回的是一个map对象
#通过list(map_obj)显示,,注意不是列表不能直接输出,可以通过for循环或者list()来显示。
>>>['sean_大宝剑', 'egon_大宝剑', 'jason_大宝剑', 'tank_大宝剑', 'yafeng666']

b通过for循环显示
name_list = ['sean', 'egon', 'jason', 'tank', 'yafeng']
map_obj = map(lambda name: name + '666' if name == 'yafeng' else name + '_大宝剑', name_list)#得到一个map对象
print(map_obj)
>>><map object at 0x000002855AC051C8>
#也可以通过for循环来取出内容
ls = []
for i in map_obj:
    ls.append(i)
print(ls)
>>>['sean_大宝剑', 'egon_大宝剑', 'jason_大宝剑', 'tank_大宝剑', 'yafeng666']
#值得注意的是该map_obj只能使用一次,用完就没了,谁先用谁先得,所以如果同时使用后面打印的结果是一个空列表

2、reduce
    用法:reduce(函数地址,可迭代对象,起始值)#起始值默认为0 --->reduce对象

#需求:求1--100的和
#普通方法
sum = 0
for i in range(1, 101):
    sum += i
print(sum)
>>>5050

# reduce方法(需要先导入这个模块才可以使用)
from functools import reduce
res = reduce(lambda x, y: x + y, range(1, 101), 0)
print(res)
>>>5050

#也可以改变起始值
from functools import reduce
res = reduce(lambda x, y: x + y , range(1, 101), 1000)
print(res)
>>>6050

3、filter(过滤)
    用法:filter(函数地址,可迭代对象) ---->filter对象
    
name_list = ['egon_大宝剑', 'jason_大宝剑',
             'sean_大宝剑', 'tank_大宝剑', 'yafeng'] 

# 需求将后缀为_大宝剑的名字 “过滤出来”(我要拿到的,不是舍去)
filter_obj = filter(lambda name: name.endswith('_大宝剑'), name_list)
print(filter_obj)#得到一个filter对象<filter object at 0x0000026E2FD02208>
print(list(filter_obj))#通过列表显示
>>>['egon_大宝剑', 'jason_大宝剑', 'sean_大宝剑', 'tank_大宝剑']

二、函数递归

'''
函数递归:
    函数递归指的是重复 “直接调用或间接调用”  函数本身,
    这是一种函数嵌套调用的表现形式。

    直接调用: 指的是在函数内置,直接调用函数本身。
    间接调用: 两个函数之间相互调用间接造成递归。

    了解:
        面试可能会问:
            python中有递归默认深度: 限制递归次数
            998, 1000
            PS: 但是在每一台操作系统中都会根据硬盘来设置默认递归深度。

        获取递归深度: 了解
            sys.getrecursionlimit()

        设置递归深度: 了解
            sys.setrecursionlimit(深度值)

注意: 单纯的递归调用时没有任何意义的。
'''
  • 直接调用
直接调用: 指的是在函数内置,直接调用函数本身。
def func():
    print('from func')
    func()
func()
  • 间接调用
间接调用: 两个函数之间相互调用间接造成递归。
def foo1():
    print('from foo1')
    foo2()
foo1()

def foo2():
    print('from foo2')
    foo1()
foo2()
  • 递归深度
python中有默认的递归深度1000(实际上只能到998)
但其实在每一台操作系统中都会根据硬盘来设置默认递归深度

#获取操作系统资源的模块
import sys
print(sys.getrecursionlimit())#获取递归深度

#设置递归深度
sys.setrecursionlimit(2000)#后面加你想要设置的递归深度

#获取你当前的递归深度
num = 1
def func():
    global num
    print('from func', num)
    num += 1
    func()

func()

'''
想要递归有意义,必须遵循两个条件:
    - 回溯:(*****)  是向下的过程
        指的是重复地执行, 每一次执行都要拿到一个更接近于结果的结果,
        回溯必要有一个终止条件。

    - 递推:(*****)  是向上的过程
        当回溯找到一个终止条件后,开始一步一步往上递推。

    age5 == age4 + 2
    age4 == age3 + 2
    age3 == age2 + 2
    age2 == age1 + 2
    age1 == 18  # 回溯终止的结果

    # age(n) == age(n - 1) + 2(n>1)
'''

![](https://img2018.cnblogs.com/blog/1843751/201911/1843751-20191115154935595-70744750.jpg)




def age(n):
    if n == 1:
        return 18
    #这里后面要写return才能实现递归
    return age(n - 1) + 2

res = age(5)
print(res)
>>>26

三、模块

  • 什么是包?
包指的是内部包含__init__.py的文件。
  • 包的作用
存放模块,包可以更好的管理模块
  • 什么是模块?
模块是一系列功能的结合体
模块的本质是一个个的.py文件
  • 模块的三种来源
1、python内置的模块
    如:sys\time\os\turtle
2、第三方的模块:
    如:requests
3、自定义的模块:
    如:自己定义的demo.py
  • 模块的四种表现形式
1、使用python编写的py文件
2、编译后的共享库比如c或者是c++库
3、包下面带有__init__.py的一组py文件
4、python解释器下的py文件
  • 为什么要使用模块
模块可以帮我们更好的管理功能代码,比如:函数
可以将项目拆分成一个个的功能,分别存放于不同的py文件
  • 如何创建
鼠标右键创建py文件
    -在py文件编写python代码
    -在一个文件中,通过import关键字导入模块
        -import 模块名
        # 注意: import 模块时,模块不能加.py后缀
在使用模块阶段,需注意,谁是执行文件,谁是被导入文件(模块)

模块在首次导入时,就已经固定好了,当前文件查找的顺序是先从内存中查到的
  • 模块导入过程
1、会先执行当前执行文件,并产生执行文件中的名称空间
2、当执行到导入模块的代码时,被导入的模块会产生一个模块的名称空间
3、会将被导入模块的名称空间加载到内存中

  • 给模块取别名
as
import 模块 as 模块的别名
  • 模块导入的方式
-import 模块

-from 包\模块 import 模块\(函数名,变量名,类名)
  • 项目的文件夹
 - conf:
        - 用于存放配置文件的文件夹
    - core:
        - 核心业务代码   .py
    - interface:
        - 接口, 接口内写获取数据前的逻辑代码,通过后才能获取数据
    - db:
        - 用于存放文件数据
    - lib:
        - 存放公共功能文件

    - log:
        - 用于存放日志文件,日志用于记录用户的操作记录

    - bin:
        - 里面存放启动文件 / - 启动文件

    - readme.txt:
        - 项目说明书, 用户告诉使用者项目的操作


所属网站分类: 技术文章 > python文章

作者:短发越来越短

链接: http://www.pythonheidong.com/blog/article/196382/

来源:python黑洞网 www.pythonheidong.com

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

21 0

赞一赞 or 踩一踩

收藏该文
已收藏

评论内容:(最多支持255个字符)

相似文章

  re学习笔记(42)安恒杯二月月赛-re- easy-py

  用Python3解决LeetCode买卖股票的最佳时机

  《Opencv计算机视觉实战》笔记_1:图像操作

  记录python之pyecharts安装

  使用python列表的pop方法求解约瑟夫环问题

  03.分支结构

  Python数据结构与算法(1)——引入

  【Django 003】创建多个应用拆分项目.

  python经典练习题十道(六)

  Numpy 的常用操作

优质资源排行榜

 python经典电子书大合集下载 下载次数 8139

 零基础java开发工程师视频教程全套,基础+进阶+项目实战(152G) 下载次数 7550

 零基础前端开发工程师视频教程全套,基础+进阶+项目实战(共120G) 下载次数 7442

 零基础大数据全套视频400G 下载次数 7006

 零基础php开发工程师视频教程全套,基础+进阶+项目实战(80G) 下载次数 6893

 零基础软件测试全套系统教程 下载次数 6506

 全套人工智能视频+pdf 下载次数 6443

 IOS全套视频教程 基础班+就业班 下载次数 4680

 编程小白的第一本python入门书(高清版)PDF下载 下载次数 3654

10  effective python编写高质量Python代码的59个有效方法 pdf下载 下载次数 3366

11  Python深度学习 pdf下载 下载次数 3156

12  笨办法学python pdf下载 下载次数 3088

13  Python Cookbook第三版中文PDF下载高清完整扫描原版 下载次数 3025

14  树莓派Python编程指南 pdf下载 下载次数 3011

15  python从入门到精通视频(全60集)python视频教程下载 下载次数 3009

16  python项目开发视频 下载次数 3002

17  使用python+pygame开发的小游戏《嗷大喵快跑》源码下载 下载次数 3000

18  黑马2017年java就业班全套视频教程 下载次数 2992

19  Python基础教程 pdf下载 下载次数 2988

20  python实战项目 平铺图像板系统源码下载,适用于想要保存,标记和共享图像,视频和网页的用户 下载次数 2987

21  利用python实现程序内存监控脚本 下载次数 2987

22  老男孩python自动化视频 下载次数 2983

23  老王python基础+进阶+项目视频教程 下载次数 2974

24  尚硅谷Go学科全套视频 下载次数 2972

25  某硅谷Python项目+AI课程+核心基础视频教程 下载次数 2968

26  Web前端实战精品课程 下载次数 2967

27  Python算法教程_中文版 pdf下载 下载次数 2967

28  tron python小游戏 下载次数 2963

29  [小甲鱼]零基础入门学习Python 下载次数 2962

30  老男孩python全栈开发15期 下载次数 2958

31  2017最新web前端开发完整视频教程附源码 下载次数 2948

32  最新全套完整JAVAWEB2018开发视频 下载次数 2926

33  流畅的Python PDF下载高清完整扫描原版 下载次数 2922

34  Spring boot实战视频6套下载 下载次数 2910

35  Python高性能编程 pdf下载 下载次数 2908

36  python全套视频十五期(116G) 下载次数 2908

37  Python项目实战 下载次数 2887

38  利用Python进行数据分析 pdf下载 下载次数 2885

39  30个小时搞定Python网络爬虫 含源码 下载次数 2884

40  简明python教程 (A Byte of Python)pdf下载 下载次数 2884

41  python全自动抢火车票教程-python视频教程下载 下载次数 2883

42  尚硅谷大数据之Hadoop视频 下载次数 2876

43  Python A~B~C~ python视频教程下载 下载次数 2866

44  数据结构与算法视频(小甲鱼讲解-全) 下载次数 2864

45  web小程序表白天数倒计时源码下载 下载次数 2863

46  python基础视频教程 下载次数 2862

47  go语言全套视频 下载次数 2855

48  清华学霸尹成Python爬虫视频-ok 下载次数 2846

49  黑马前端36期最全视频和代码 下载次数 2843

50  2018最新全套web前端视频教程+源码下载 下载次数 2842