一、函数递归

什么是函数递归:

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

其中,函数的递归有明确的结束条件,不能无限制的调用,否则会撑破内存,在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())

python基础之Day15的更多相关文章

  1. python基础学习Day15 面向对象、类名称空间、对象名称空间 (2)

    一.类 先看一段代码: class Person: animal = '高级动物' walk_way = '直立行走' # 静态属性,静态变量,静态字段 language = '语言' def __i ...

  2. python基础一 day15 面试题

    # def demo():# for i in range(4):# yield i## g=demo()## g1=(i for i in g)# g2=(i for i in g1)## prin ...

  3. python基础一 day15 作业

    3.处理文件,用户指定要查找的文件和内容,将文件中包含要查找内容的每一行都输出到屏幕def check_file(filename,aim): with open(filename,encoding= ...

  4. python基础一 day15 复习

    迭代器和生成器迭代器 可迭代协议 —— 含有iter方法的都是可迭代的 迭代器协议 —— 含有next和iter的都是迭代器 特点 节省内存空间 方便逐个取值,一个迭代器只能取一次.生成器 —— 迭代 ...

  5. python基础一 day15 内置函数

    '\r' 回车,回到当前行的行首,而不会换到下一行,如果接着输出的话,本行以前的内容会被逐一覆盖: '\n' 换行,换到当前位置的下一行,而不会回到行首: # print()# input()# le ...

  6. Python之路,Day15 - Django适当进阶篇

    Python之路,Day15 - Django适当进阶篇   本节内容 学员管理系统练习 Django ORM操作进阶 用户认证 Django练习小项目:学员管理系统设计开发 带着项目需求学习是最有趣 ...

  7. Python之路【第二篇】:Python基础

    Python基础 对于Python,一切事物都是对象,对象基于类创建 所以,以下这些值都时对象:"zhurui".22.['北京','上海','深圳'],并且是根据不同的类生成的对 ...

  8. python之最强王者(2)——python基础语法

    背景介绍:由于本人一直做java开发,也是从txt开始写hello,world,使用javac命令编译,一直到使用myeclipse,其中的道理和辛酸都懂(请容许我擦干眼角的泪水),所以对于pytho ...

  9. Python开发【第二篇】:Python基础知识

    Python基础知识 一.初识基本数据类型 类型: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位 ...

随机推荐

  1. 6.8 出口条件循环:do while

    while循环和for循环都是入口条件循环,即在循环的每次迭代之前检查测试条件,所以有可能根本不执行循环体中的内容.C语言还有出口条件循环(exit-condition loop),即在循环的每次迭代 ...

  2. go语言学习--处理map的无序输出

    最近工作中遇到了这样的一个场景,需要处理一个无限极分类的问题,对于数据结构的定义首先想到了,map,map[int]map[int]struct.通过两层map的定义归类parent_id和id的关系 ...

  3. Percona XtraDB Cluster Strict Mode(PXC 5.7)

    在Percona XtraDB Cluster集群架构中,为了避免多主节点导致的数据异常,或者说一些不被支持的特性引发的数据不一致的情形,PXC集群可以通过配置pxc_strict_mode这个变量来 ...

  4. ssh免密钥之上厕所

    ssh服务简单介绍 SSH协议框架中最主要的部分是三个协议: *传输层协议(The Transport Layer Protocol)提供服务器认证,数据机密性,信息完整性等的支持; *用户认证协议( ...

  5. 谷歌浏览器内核Cef js代码整理(三) 字符串处理

    *字符串截取方法*/ var s="abc_def[ghi]jk[i]"; var temp;function CopyFromStr(str_source,str_key, bl ...

  6. 10-安装es

    1.安装jdk(jdk要求1.8.20或1.7.55以上) 2.上传es安装包 3.解压es tar -zxvf elasticsearch-2.3.1.tar.gz -C /opt/app/ 4.e ...

  7. py库: flask笔记

    http://flask.pocoo.org/ http://flask.pocoo.org/docs/0.12/api/#api API http://docs.pythontab.com/flas ...

  8. 先 FROM 后 WHERE 再 GROUP BY 再 SELECT 再 order BY

    shutdown -r -t 5office:515740906family-asus:786512915office-T420i:837829568 family-T420:868 638 325 ...

  9. airbnb 开源reAir 工具 用法及源码解析(一)

    reAir 有批量复制与增量复制功能 今天我们先来看看批量复制功能 批量复制使用方式: cd reair ./gradlew shadowjar -p main -x test # 如果是本地tabl ...

  10. kill all java php rm.sh

    #!/bin/sh#根据进程名杀死进程#FileName: killjavaphprm.sh #查看php进程IDecho "php进程ID:"pgrep php #杀死所有php ...