博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
递归函数、匿名函数、内置函数
阅读量:4586 次
发布时间:2019-06-09

本文共 3604 字,大约阅读时间需要 12 分钟。

Python-16

@(Python)

一、函数递归

1. 什么是函数递归

  • 函数递归,就是函数的递归调用,是一种特殊的嵌套调用,在调用一个函数时,直接或间接的调用了自己

① 递归必须要有两个阶段

  • 递推阶段:先一层一层递归调用下去, 每进入下一层递归,问题的规模必须减少
  • 回溯阶段:得到结果后,再一层一层回溯

补充说明:

  • 递归必须要有一个明确的结束条件,在满足该条件时结束递推,并开始回溯
  • 只有下一层递归结束,上一层才能结束
  • 递归不是单独的重复,根据问题的的规模,每进入下一层递归,问题的规模必须减少
  • 递归的目的在于,通过不断的重复,来接近一个最终的结果

② 直接调用自己

Alt text

Alt text

  • 说明:Python中有递归优化,达到一定层数就终止掉,避免无限制占用内存

③ 间接调用自己

Alt text

  • 取出下面列表中的数字x_list=[1,[2,[3,[4,[5,[6,[7,[8,[9,[10]]]]]]]]]]

Alt text

④ 递归层数更改(了解)

  • 查看递归的层数限制,使用import sys模块

Alt text

  • 更改递归层数(了解)

Alt text

2. 递归的二分法应用

  • 如下,有从小到大排列的整型数字列表
  • 要求:输入数字,判断这个数字是否在这个列表中

① 一般方法

nums=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]search_num=10for item in nums:    if item == search_num:        print('find it')        breakelse:    print('not exist')

② 递归+二分法的方法

  • 二分法:就是将列表不断的从中间分成两份,缩小查找的范围
  • 利用列表切片,不断的切列表

Alt text

number_list=[1,2,3,4,5,6,7,8,9,10,11,12,13,14]def number(search_number,number_list):    if len(number_list) == 0:  # 如果==1,那么list_mid_index+1就不能加1        print('number is not exist')        return    list_mid_index=len(number_list)//2    if search_number > number_list[list_mid_index]:        number_list=number_list[list_mid_index+1:]        number(search_number,number_list)    elif search_number < number_list[list_mid_index]:        number_list=number_list[:list_mid_index]        number(search_number,number_list)    else:        print('find it')number(1,number_list)

二、匿名函数

  • 匿名函数是没有绑定函数名字的函数
  • 匿名函数一般不单独使用,一般配合max min map sorted filter内置函数使用
  • 匿名函数一般使用一次就不用了

1. 匿名函数的格式

  • lambda x,y:x+y,在没有调用前,就是内存地址
  • 匿名函数写在一行,lambda表示匿名函数
  • x+y相当于return x+y

2. max()+匿名函数

  • max(可迭代对象)求最大值
salaries={    'egon':3000,    'alex':10000000,    'wupeiqi':10000,    'yuanhao':2000}取出这个字典中,工资最高的信息

① max()的工作原理

Alt text

  • max的返回值不可改,比如传入的是字典,那返回值就是字典的key;传入的是列表,返回的就是元素
  • 因此,max取出的是字典的key,统计的是key字符串的个数最多的
  • 虽然max的返回值不可改,但是改变max的比较依据

② 普通使用方式

使用格式:max(salaries,key=func)

  • max(a)首先将迭代对象a变为迭代器对象
  • ② 运行next,将可迭代器对象a当做参数传给key后面的函数funcfunc()函数处理后,得到的返回值就是比较依据
  • max()根据这个返回值做比较,最后的结果是和字典对应的key

Alt text

③ 配合匿名函数使用

Alt text

补充说明:

  • key=func表示指定max的比较依据是func的返回值,这个func函数,可以是自定义的匿名函数
  • max结果,当做参数传给key后面的函数,将这个函数返回值当做比较依据

3. min()+匿名函数

  • min(可迭代对象)求最小值

Alt text

4. sorted()+匿名函数

  • sorted()默认将列表中内容,按从小到大顺序排列
  • sorted()不改变原值,重新赋值会开辟新内容空间

Alt text

  • sorted(列表,reverse=True)从大到小顺序排列

Alt text

① 配合匿名函数使用

salaries={    'egon':3000,    'alex':10000000,    'wupeiqi':10000,    'yuanhao':2000}按照工资从低到高,显示人名按照工资从高到低,显示人名
  • 如果不改变对比依据,默认会以key作为对比依据

Alt text

  • 按照工资从低到高,显示人名:sorted(salaries,key=lambda k:salaries[k])

Alt text

  • 按照工资从高到低,显示人名:sorted(salaries,key=lambda k:salaries[k],reverse=True)

Alt text

5. map()+匿名函数

① map()的工作原理

使用格式:map(lambda,names)

  • map(lambda,names)首先将迭代对象names变为迭代器对象
  • ② 运行next,将可迭代器对象names当做参数传给前面的匿名函数lambda,匿名函数lambda的返回值当做map的结果
  • names中的值,按照lambda中的规则,映射成新的值
names=['a','b','c','d','e','f']print(map(lambda x:x+'_it',names))x_list=map(lambda x:x+'_it',names)print(list(x_list))

Alt text

6. filter()+匿名函数

① filter()的工作原理

使用格式:filter(lambda,names)

  • filter(lambda,names)首先将迭代对象names变为迭代器对象
  • ② 运行next,将可迭代器对象names当做参数传给前面的匿名函数lambdafilter会判断匿名函数lambda的返回值的真假,如果为真就留下

② 配合匿名函数使用

filter(lambda x:x.endswith('tesla'),names)留下以tesle结尾的元素

Alt text

7. 其他调用方式:

Alt text

Alt text

三、内置函数

Alt text

1. 需要掌握的

① bytes()

  • 编译为二进制
    Alt text

2. 了解的

① abs()

  • 将负数转成正数

Alt text

② all()

  • 只要有一个值不为真,全部都不为真;空为真

Alt text

③ any()

  • 只要有一个布尔值为真,都为真;空为False

Alt text

④ callable()

  • 判断是否为可以被调用的

Alt text

⑤ chr()

  • 根据ASCII编码表,将数字转成对应的字符
    Alt text

⑤ ord()

  • 根据ASCII编码表,将字符转成对应的数字

Alt text

⑥ dir()

  • dir可以查看内置方法可以调哪些功能

Alt text

⑦ divmod()

  • divmod处理结果为元组形式(商,余数)
  • 用途:页面的分页显示

Alt text

⑧ enumerate()

  • 取出列表索引

Alt text

⑨ eval()

  • 将字符窜的表达式提取出来
  • 可以将字符串类型的列表、字典转化成列表、字典

Alt text

⑩ frozenset()

Alt text

⑪ globals和locals

  • globals查看全局命名空间的变量 ;locals查看局部的命名空间的变量

Alt text

Alt text

⑫ hash()

  • 判断是否为可哈希
    Alt text

⑬ help()

  • 查看一个函数的注释

Alt text

⑭ pow()

  • **pow(3,2,2)表示(3**2%2,3的2次方,除2后取余数**

Alt text

⑮ round()

  • 四舍五入

Alt text

⑯ slice()

  • 类似于列表的分片,slice(1,5,2)1表示起始位置,5结束位置,2表示步长

Alt text

⑰ sum()

  • sum()求和

Alt text

import()

  • __import__('字符串')表示以字符串的格式导入模块
  • import表示导入模块

Alt text

转载于:https://www.cnblogs.com/itone/p/9524594.html

你可能感兴趣的文章
Linux用iso镜像制作本地yum源
查看>>
在SSH项目中Struts2、Spring、Hibernate分别起到什么作用?
查看>>
网络编程协议
查看>>
5.9
查看>>
备份项目实例
查看>>
8天学通MongoDB——第二天 细说增删查改
查看>>
TextBloc研究
查看>>
Engine auto idle help conserve fuel reduce noise
查看>>
MAC下安装pomelo
查看>>
182. Duplicate Emails
查看>>
Redis、Memcache和MongoDB的区别
查看>>
设计模式笔记 ------ 原型模式
查看>>
通过Repeater控件绑定数据,相同数据合并单元格。
查看>>
h5 和之前版本的区别
查看>>
【UVAlive 3989】 Ladies' Choice (稳定婚姻问题)
查看>>
【FFT&NTT 总结】
查看>>
洛谷——P1802 5倍经验日
查看>>
leetcode121—Best Time to Buy and Sell Stock
查看>>
【系统优化】为系统提速,何须重装
查看>>
让Chrome 接管邮件连接,收发邮件更方便了
查看>>