一、函数递归

什么是函数递归:

  函数递归调用是一种特殊的嵌套调用,在调用一个函数的过程中,又直接或间接地调用了该函数本身。

其中,函数的递归有明确的结束条件,不能无限制的调用,否则会撑破内存,在Python中限定递归最多调用1000层。

1000层这个值是大概的数值,这个数值可以通过Python内置的功能进行更改。

递归必须要有两个明确的阶段:

  递推:一层层递归调用下去,强调每次进入下一次递归,问题规模都在减小

  回溯:递归必须要有一个明确的结束条件,在满足该条件时结束递推,开始一层层回溯

  其中,递归的精髓在于通过不断的重复逼近一个最终结果。

循环(while)能做的,递归都可以,为什么还要递归?

  因为相较于循环,递归无须确定循环次数,只需确定结束条件。

举个例子,递归的应用:

二分法:

有个从小到大排列对的列表,判断某个值是否在里面。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
nums=[1,3,7,11,22,34,55,78,111,115,137,149,246,312]
def search(search_num,nums):
    print(nums)
    if len(nums)==0:
        print('not exists')
        return
    mid_index=len(nums)//2
    if search_num>nums[mid_index]:
        nums=nums[mid_index+1:]
        search(search_num,nums)
    elif search_num<nums[mid_index]:
        nums=nums[:mid_index]
    else:
        print('find it')
search(31,nums)

 二、匿名函数

有名函数:基于函数名重复使用

匿名函数:没有绑定名字的下场就是使用一次就被回收了。

定义:

lambda x,y: x+y

其中冒号后面的值就相当于有名函数里的return 后面的值

res=( lambda x,y: x+y)(1,2)

max 工作原理:

1、首先将可迭代对象变成迭代器对象

2、res=next(迭代器对象)将res当作参数传给key指定的函数,然后将该函数的返回值当成判断的依据。

map的工作原理:

1、首先将可迭代对象变成迭代器对象

2、res=next(迭代器对象)将res当作参数传给第一参数指定的函数,然后将该函数的返回值当成结果之一

filter工作原理:

1、首先将可迭代对象变成迭代器对象

2、res=next(迭代器对象)将res当作参数传给第一个参数指定的函数,然后filter会判断函数的返回值的真假,如果为真则留下res

三、常用内置函数

1、

res='你好’.encode('utf-8')

res=bytes('你好’,encoding='utf-8')

2、

参考ASCII码将数字转成对应的字符

print(chr(65))      #'A'

参考ASCII码将字符转成对应的数字

print(ord('a'))      #97

3、

将两个数进行取模运算,得到商和余数

print(divmod(10,3))      #(3, 1)

4、

l=['a','b','c']      #枚举
for item in enumerate(l):
print(item)

5、

l='[1,2,3]'      #将字符串中的东西拿出了执行一遍
l1=eval(l)
print(l1,type(l1))
print(l1[0])

6、

print(round(3.3))  #四舍五入

7、

print(sum(range(101)))  #求和

8、

将字符串变成模块名

module=input('请输入你要导入的模块名>>: ').strip() #module='asdfsadf'
m=__import__(module)
print(m.time())

最新文章

  1. 回顾yii的学习进程 总结了一下的发展过程
  2. mvvm的优势
  3. spring security为不同用户显示各自的登录成功页面
  4. mysql删除带有NULL的行
  5. bootstrap插件学习-bootstrap.typehead.js
  6. [转] C# Winform 拦截关闭按钮触发的事件
  7. Delphi中TxmlDocument控件的用法 转
  8. ExtractFileDir 与 ExtractFilePath 的差别
  9. linux使用共享内存通信的进程同步退出问题
  10. 使用vue+flask做全栈开发的全过程(实现前后端分离)
  11. Get json formatted string from web by sending HttpWebRequest and then deserialize it to get needed data
  12. node里面的c/c++模块
  13. Mybatis框架基础支持层——日志模块(8)
  14. FineUIMvc随笔(3)不能忘却的回发(__doPostBack)
  15. Distinct Values(2018hdu多校第一场)
  16. MySQL使用普通用户访问返回ERROR 1698 (28000): Access denied for user &#39;root&#39;@&#39;localhost&#39;
  17. Modbus库开发笔记:Modbus ASCII Slave开发
  18. Sequential Minimal Optimization (SMO) 算法
  19. Android之socket多线程
  20. Ubuntu 14.04 安装adobe flash player

热门文章

  1. Linux之cp、rm、mv
  2. linux git pull/push时提示输入账号密码之免除设置
  3. springMVC配置文件web.xml与spring-servlet.xml与spring-jdbc.xml与logback.xml与redis.properties与pom.xml
  4. CSS之display
  5. python之路——11
  6. 记一次sshd启动报错,Failed to start OpenSSH server daemon.
  7. 【Linux】【Jenkins】代码编译和执行过程中的问题汇总
  8. Java并发编程75个问答
  9. easy ui 关闭选项卡
  10. adobe cc最新版 软件安装与激活