一、匿名函数

匿名函数主要是为了解决一些简单需求而设计的一种函数,匿名函数的语法为:

lambda 形参: 返回值

先来看一个例子:

# 计算n的n次方
In[2]: lst = lambda n: n ** n # 这里的lst就是一个匿名函数
In[3]: print(lst(3))
27

使用匿名函数需要注意的几点:

  • 函数的参数可以有多个,多个参数之间⽤逗号隔开
  • 匿名函数不管多复杂. 只能写⼀⾏, 且逻辑结束后直接返回数据
  • 返回值和正常的函数⼀样, 可以是任意数据类型

二、内置函数补充

sorted

sorted是python内置的一个用于排序的函数,它接收三个参数,语法为;

sorted(Iterable, key=None, reverse=False)
  • Iterable: 接收一个可迭代对象,sorted内部会去循环可迭代对象取出元素
  • key: 排序规则(排序函数),sorted将每次从可迭代对象中取出的数据会传递给这个排序函数的参数,根据函数运算的结果进行排序
  • reverse: 控住是否倒叙,True为倒叙,默认为False正序
# 根据字符串⻓度进⾏排序
In[7]: lst = ["麻花藤", "冈本次郎", "中央情报局", "狐仙"]
In[8]: lst2 = sorted(lst, key=lambda s: len(s))
In[9]: print(lst2)
['狐仙', '麻花藤', '冈本次郎', '中央情报局']

sorted如果不传作排序用的函数,那么它默认是按照在字符编码中的顺序来排的:

In[10]: lst = ["麻花藤", "冈本次郎", "中央情报局", "狐仙"]
In[11]: lst2 = sorted(lst)
In[12]: lst2
Out[12]: ['中央情报局', '冈本次郎', '狐仙', '麻花藤']
In[14]: print(ord('中'))
20013
In[15]: print(ord('冈'))
20872
In[16]: print(ord('狐'))
29392
In[17]: print(ord('麻'))
40635

filter

filter是python中内置的一个过滤的函数,其用法跟sorted差不多:

filter(function, iterable)
  • function: ⽤来筛选的函数. 在filter中会⾃动的把iterable中的元素传递给function. 然后

    根据function返回的True或者False来判断是否保留此项数据
  • iterable: 可迭代对象
In[21]: lst = [{'id':1,'name':'alex','age':28},
...: {'id':2,'name':'taibai','age':58},
...: {'id':3,'name':'taihei','age':18},
...: {'id':4,'name':'henhei','age':38}] In[22]: ret2 = filter(lambda x: x['age'] >= 38, lst)
...: [print(x) for x in ret2]
{'id': 2, 'name': 'taibai', 'age': 58} # 从结果来看,年龄小于38的都被过滤掉了
{'id': 4, 'name': 'henhei', 'age': 38} Out[22]: [None, None]

map

映射函数map,使用语法为:

map(function, iterable)

可以对可迭代对象中的每⼀个元素进⾏映射. 分别取执⾏function(其语法和sorted、filter相似)

In[23]: names=['oldboy','alex','wusir']

In[24]: m = map(lambda s: s + '123', names)           # 在每个字符串后加上123

In[25]: print(list(m))                                # map返回的也是一个可迭代对象,使用list会去循环遍历元素
['oldboy123', 'alex123', 'wusir123']

三、递归

在函数中调⽤函数本⾝. 就是递归

def func():
print("我是谁")
func() func()

在python中最大递归深度为1000:

In[26]: import sys

In[27]: sys.getrecursionlimit()           # 虽然我们查询到的结果是1000,但是实际上却跑不到1000,通常是998或者997
Out[27]: 1000

递归的应用:计算斐波那契数列 f(0) = 1 f(1) = 1 f(n) = f(n-1) + f(n-2)

In[35]: def fib(n):
...: if n == 0:
...: return 1
...: if n == 1:
...: return 1
...: return fib(n-1) + fib(n-2)
...: In[36]: fib(5)
Out[36]: 8 In[37]: fib(10)
Out[37]: 89

总结:

  • 递归函数总是涉及到压栈和出栈的过程
  • 递归函数总是压栈,知道遇到退出条件,然后出栈
  • Python中递归函数有深度限制,可以通过sys.getrecursionlimit()得到深度限制,可以通过sys.setrecursionlimit调整递归深度限制
  • 递归函数在Python非常慢,并且有深度限制,所以 因尽量避免使用递归

四、二分法查找

⼆分查找. 每次能够排除掉⼀半的数据. 查找的效率非常⾼. 但是局限性比较⼤. 必须是有

序序列才可以使⽤⼆分查找

  • 要求: 查找的序列必须是有序序列

(1) 使用基本的算法实现:

lst = [4, 56, 178, 253, 625, 1475, 2580, 3574, 15963]

n = int(input("请输入一个数字n:"))      # 56

left = 0                              # 左边界
right = len(lst) - 1 # 末尾的索引 右边界
while left <= right: # 当左边界大于右边界结束循环 mid = (left + right) // 2 # 求中间的索引坐标
if n < lst[mid]: # 判断你的数字和中间数的大小比较 .
right = mid - 1 # 右边界往左移动 elif n > lst[mid]:
left = mid + 1 # 左边界往右移动 else:
print("找到了") # 找到了目标数字
break
else: # 当左比右大, 循环结束. 没有找到目标数
print("没找到")

(2)使用递归实现:

lst = [4, 56, 178, 253, 625, 1475, 2580, 3574, 15963]

def binary_search(lst, n, left, right):
if left > right:
return False
mid = (left + right) // 2
if n > lst[mid]:
left = mid + 1
# 当递归有返回值的时候. 需要写return. 否则有可能接收不到返回值
return binary_search(lst, n, left, right)
elif n < lst[mid]:
right = mid - 1
return binary_search(lst, n, left, right)
else:
print("找到了")
return True n = int(input("请输入一个数字n:")) # 178
ret = binary_search(lst, n, 0, len(lst)-1)
print(ret) # 结果:
# 请输入一个数字n:178
# 找到了
# True

切记:当递归有返回值的时候. 需要写return. 否则有可能接收不到返回值

(3)对列表切片:

def binary_search(lst, n):
if len(lst) == 0:
return False
left = 0
right = len(lst) - 1
mid = (left + right) // 2
if n > lst[mid]:
left = mid + 1
# 当递归有返回值的时候. 需要写return. 否则有可能接收不到返回值
return binary_search(lst[mid+1:], n)
elif n < lst[mid]:
right = mid - 1
return binary_search(lst[:mid], n)
else:
print("找到了")
return True

python学习笔记:第14天 内置函数补充和递归的更多相关文章

  1. python学习笔记(七)——内置函数

    builtins.py模块,是python的内建模块,在运行时会自动导入该模块.在该模块中定义了很多我们常用的内置函数,比如print,input 等. 在 builtins.py 模块中给出如下注释 ...

  2. python学习笔记(五)— 内置函数

    我们常用的‘’int,str,dict,input,print,type,len‘’都属于内置函数 print(all([1,2,3,4]))#判断可迭代的对象里面的值是否都为真 print(any( ...

  3. python学习笔记(四):生成器、内置函数、json

    一.生成器 生成器是什么?其实和list差不多,只不过list生成的时候数据已经在内存里面了,而生成器中生成的数据是当被调用时才生成呢,这样就节省了内存空间. 1. 列表生成式,在第二篇博客里面我写了 ...

  4. python学习笔记(九)内置函数

    print(all([1,2,3,4]))#判断可迭代的对象里面的值是否都为真 True print(any([0,1,2,3,4]))#判断可迭代的对象里面的值是否有一个为真 True print( ...

  5. Python学习日记(六)——内置函数和文件操作(lambda)

    lambda表达式 学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即: # 普通条件语句 if 1 == 1: name = 'prime' else: name = 'c ...

  6. python 内置函数补充 or 递归 or 二分法

    一.内置函数的补充 repr() 显示出字符串的官方表示形式 chr() print(chr(20013)) # 把数字编码转换成字符串 ord() print(ord('中')) # 20013 把 ...

  7. 巨蟒python全栈开发-第14天 内置函数2 递归 二分查找

    一.今日内容总览 1.内置函数补充 repr() 显示出字符串的官方表示形式 chr() arscii码中的字,转换成位置 ord() arscii码中的位置,转换成字2.递归 自己调用自己 两个口: ...

  8. 《Python》 内置函数补充、匿名函数、递归初识

    一.内置函数补充: 1.数据结构相关(24): 列表和元祖(2):list.tuple list:将一个可迭代对象转化成列表(如果是字典,默认将key作为列表的元素). tuple:将一个可迭代对象转 ...

  9. Python之路----内置函数补充与匿名函数

    内置函数补充:reversed()保留原列表,返回一个反向的迭代器 l = [1,2,3,4,5] l.reverse() print(l) l = [1,2,3,4,5] l2 = reversed ...

随机推荐

  1. GPDB 5.x PSQL Quick Reference

    General \copyright show PostgreSQL usage and distribution terms \g [FILE] or ; execute query (and se ...

  2. QT的组合键

    https://www.cnblogs.com/Jace-Lee/p/5859293.html

  3. Python学习---同步条件event/队列queue1223

    写在前面: 在使用这些共享API的时候,我们要注意以下几点: 在UNIX平台上,当某个进程终结之后,该进程需要被其父进程调用wait,否则进程成为僵尸进程(Zombie).所以,有必要对每个Proce ...

  4. ESP32D0WDQ6 灯泡 黑客

    这个黑客表现得如何聪明 灯泡 可能泄漏您的Wi-Fi密码O网页链接破解者博客详文 Pwn the LIFX Mini white O网页链接ESP32D0WDQ6, a SoC from ESPRES ...

  5. July 21st 2017 Week 29th Friday

    If you want to fly too high in relation to the horizon forget. 要想飞得高,就该把地平线忘掉. Always keep our eyes ...

  6. 2维FFT算法实现——基于GPU的基2快速二维傅里叶变换

    上篇讲述了一维FFT的GPU实现(FFT算法实现——基于GPU的基2快速傅里叶变换),后来我又由于需要做了一下二维FFT,大概思路如下. 首先看的肯定是公式: 如上面公式所描述的,2维FFT只需要拆分 ...

  7. QuantLib金融库的简易安装

    最近在弄毕设,研究关于固定收益债券定价方面的知识,需要使用到QuantLib这个Python金融库,但是这是一个C++编译的库,官网也只给出了源代码,安装起来十分繁琐,所以在网上找了一个简易的安装方法 ...

  8. 【[HNOI2004]L语言】

    \(Trie\)树+\(DP\) 我们只需要做一个存在性dp就好了 对于每一个字符串,我们设\(f[i]\)表示从\(1\)到\(i\)位是否能被完全匹配 首先\(f[0]=1\),之后我们对于每一个 ...

  9. Centos 7 安装Anaconda3

    1.首先下载地址: https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 使用清华镜像下载速度快 2.安装 bash Anaconda3-5.1 ...

  10. Vue 问题记录

    Vue 问题记录 汇总日常开发中遇到的关于vue的问题 VeeValidator 语言设置 校验消息默认是英文的,定义中文或其他语言的错误提示消息 import VeeValidate from 'v ...