python中的内置函数(2)
一.lambda匿名函数
定义:为了解决一些简单的需求而设计的一句话函数
例子:计算n的n次方
def func(n):#正常的写法
return n**2
print(func(10)) # f=lambda n:n**2
print(f(10)) #
这里的lambda小时的是匿名函数,不需要用def来声明,一句话就可以声明出一个函数 语法:
函数名=lambda 参数:返回值 注意:
1.函数的参数可以有多个,多个参数之间用逗号隔开,多个返回值也需要用逗号隔开,并且需要用小括号括起来
2.匿名函数不管多复杂,只能写一行
3.返回值和正常函数一样,可以是任意数据类型 匿名函数并不是说一定没有名字,这里前面的变量就可以看做函数名,说他匿名的原因是我们通过__name__查看的时候统一都叫lambda
__name__的使用方法:__name__在这里用的看起来没有多大的作用,实际上在一个大的文件中,函数可能被多次调用传递,这时只能通过__name__来查看
def func(n):
return n**2
print(func(10)) #
print(func.__name__) f=lambda n:n**2
print(f(10))
print(f.__name__) #<lambda>
匿名函数也可以用*args()和**args():
f=lambda *args:max(args)
print(f(1,2,3,4,55,9,2,1)) #
二.sorted() 排序函数,内置函数提供的一个供可迭代对象排序的通用的方案
语法:sorted(iterable,key==none,reverse=false)
key:排序规则,在sorted的内部,会将可跌倒对象的每一个元素传递给这个函数的形参,根据函数运算的结果进行排序
reverse:是否倒叙,默认是False,不是倒叙即正序,true是正序
lst2=sorted(lis) #原列表不会改变,返回的是一个新列表
print(lst2) #[1, 1, 2, 2, 3, 4, 5, 5, 6, 6, 8, 55]
★★★★★★★★★★★★★★★★★★★★★★内置函数一般不会改变原对象,会产生并返回一个新的对象 对字典排序
dic={1:'啊',2:'想',3:'睡觉',4:'不能睡'}
dic1=sorted(dic)
print(dic1) #[1, 2, 3, 4] 返回的是排序后的 key
根据字符串的长度排序
lis=['杀鸡取卵','杀鸡给猴看','杀人如麻,咦,吓人','杀气腾腾,阔怕']
print(sorted(lis,key=lambda el:len(el)))
dic=[
{'name':'汪峰','age':20},
{'name':'章子怡','age':18},
{'name':'美丽','age':13}
]
dic1=sorted(dic,key=lambda el:el['age'],reverse=True)
print(dic1) #[{'name': '汪峰', 'age': 20}, {'name': '章子怡', 'age': 18}, {'name': '美丽', 'age': 13}]
三.filter()筛选函数
语法:filter(function,iterable)
function:用来筛选的函数,在filter中自动的会吧iterable中的每一个元素传给function,然后根据function返回的true或False来判断是否保留此项数据
iterable:可迭代对象
lis=[1,2,3,4,5,5,66,98,55,15,20]
lis1=filter(lambda el:el%2==0,lis) #符合函数的内容就是true,留下,不符合函数的内容就是False,筛掉
print(lis1) #<filter object at 0x000002B514A08860> #返回的是内存地址
print(list(lis1)) #[2, 4, 66, 98, 20] lis=['周冬雨','李易峰','周杰伦','李连杰','李小龙']
ll=filter(lambda el :el[0]=='周',lis)
print(list(ll)) #['周冬雨', '周杰伦'] dic=[
{'name':'汪峰','age':20},
{'name':'章子怡','age':18},
{'name':'美丽','age':13}
]
baobao=filter(lambda el:el['age']<15,dic)
print(list(baobao)) #[{'name': '美丽', 'age': 13}]
四.map():映射函数
语法:map(function,iterable) 将列表中的每一个元素都践行function操作,返回得到的列表的地址
def func(e):
return e*e
mp=map(func,[1,2,3,4])
print(list(mp)) #[1, 4, 9, 16] lis=[1,2,3,4,5,6]
mp=map(lambda el :el**2,lis)
print(list(mp)) #[1, 4, 9, 16, 25, 36] 计算两个列表中相同位置的数据的和
lis=[1,2,3,4,5,6]
# lis2=[6,5,4,3,2,1]
# mp=map(lambda el1, el2 :el1+el2 ,lis,lis2)
# print(list(mp)) #[7, 7, 7, 7, 7, 7] map()也存在水桶效应
lis=[1,2,3]
lis2=[6,5,4,3,2,1]
mp=map(lambda el1, el2 :el1+el2 ,lis,lis2)
print(list(mp)) #[7, 7, 7]
分而治之:一个人处理一个量特别大的数据太慢,而且耗内存,所以假设这个人找了五个人来完成,
但是五个人的工作量依旧很大,所以这五个人每个人又找了十个人......一次下去直达工作量合适
lis=[1,2,4,5,5,8,6,6,5,5,5,6,6,5,55,5,9,5,5,44,4,8,56,98,5654,654565,65,65,56,5,6,5,456,48,9,89,8,98,56]
mp = map ( func1 , map ( func2 , map ( func3 , lis ) ) )
func3的目的是将这个这个大工作量的list切片成五份
func2的目的是将这五份中的每一份又切片成十份
func3的目的是将一共的50份每份都做映射处理,得到想要的结果
print(list(mp))
五.递归:在函数中调用函数本身就是递归
i=1
def func(i):
print(i)
print('我是专业的!')
i+=1
func(i)
func(i)
我是专业的!
995
我是专业的!
996
我是专业的!
997
我是专业的!
998 #在python中递归的最大深度到998,官方的最大深度是1000,但是在这之前会报错
递归的作用:可以使用递归来便利各种树形结构,比如文件夹系统,可以使用递归便利一个文件夹中的所有文件
import os #引入os模块
def func(filepath,n): #failpath是要打开的文件的路径 n用来控制文件或文件夹前有几个tab键,以形成层次
files=os.listdir(filepath) #os模块中的方法,获取当前文件夹中的所有文件名
for fi in files: #将所有的文件名遍历
fi_d=os.path.join(filepath,fi) #引用os模块中的方法,将e:/python和文件名连在一起,组成一个新的路径
if os.path.isdir(fi_d): #判断该路径下的文件是不是文件夹
print('\t'*n+fi+':') #前面加指定个数的tab键,文件名,冒号
func(fi_d,n+1) #继续调用func函数
else:
print('\t'*n+fi) #直接打印文件名
func('e:/python',0)
六.二分法查找:
二分法查找,每次能够 排除掉一半的数据,查找的效率非常高,但是有一定的局限性,必须是有序序列才可以使用二分法查找
判断n是否在lst中,如果存在返回n所在位置的索引
普通版本二分法
lst=[11,22,33,44,55,66,77,88,99,123,145,156,178,189,215,246,287,298,568,687,789,890,960]
n=246
left=0
right=len(lst)-1
middle=(left+right)//2
while left<=right:
if n<lst[middle]:
right=middle-1
middle = (left + right) // 2
elif n>lst[middle]:
left=middle+1
middle = (left + right) // 2
elif n==lst[middle]:
print('找到了',middle)
break
else:
print('没找到')
递归版本二分法
lst=[11,22,33,44,55,66,77,88,99,123,145,156,178,189,215,246,287,298,568,687,789,890,960]
def func(n,left,right):
if left <=right:
middle=(left+right)//2
if n<lst[middle]:
right=middle-1
return func(n, left, right)
elif n>lst[middle]:
left=middle+1
return func(n, left, right)
elif n==lst[middle]:
print('找到了')
return middle #这个位置返回的值返回的是给调用他的函数,而不是直接返回给第一个func
else:
print('没找到')
return -1
ret=func(78,0,len(lst)-1)
print(ret)
python中的内置函数(2)的更多相关文章
- python中的内置函数,递归,递归文件显示(二),二分法
1.部分内置函数 repr()显示出字符串的官方表示形式,返回一个对象的string形式 # repr 就是原封不动的输出, 引号和转义字符都不起作用 print(repr('大家好,\n \t我叫周 ...
- python中的内置函数(一), lambda, filter, map
https://www.processon.com/view/link/5c10da0ce4b099ae3e137bf6 1.内置函数 内置函数就是python中提供的,可以直接拿来用的函数,比如pr ...
- python中一些内置函数实例
lambda表达式 简单函数可用lambda表达式 1. def f1() return(123) r1=f1() print() 2. f2=lambda:123 r2=f2() print() 以 ...
- python中的内置函数(一)
内置函数:内置函数就是python提供的,可以拿来直接用的函数 作用域相关 locals():返回当前作用域中的名字globals():返回全局作用域中的内容 def func(): print('我 ...
- 2018.8.14 python中的内置函数(68个)
主要内容: python中68个内置函数的功能及使用方法
- python学习之【第十篇】:Python中的内置函数
1.前言 内置函数,就是Python内部预先定义好的函数,可以直接使用,Python中内置函数有以下这么多个: 2.map() 描述: map() 会根据提供的函数对指定序列做映射.第一个参数 fun ...
- Python中max()内置函数使用(list)
在学习完列表和元组的基础知识后,做到一个题: 求出列表中频次出现最多的元素. 学习到了python内置函数max的用法 其参数key的用法 匿名函数lamda的用法 python内置函数max() m ...
- python中常用内置函数和关键词
Python 常用内置函数如下: Python 解释器内置了很多函数和类型,您可以在任何时候使用它们.以下按字母表顺序列出它们. 1. abs()函数 返回数字的绝对值. print( abs(-45 ...
- Python中的内置函数__init__()的理解
有点意思,本来我是学习java的.总所周知,java也有构造函数,而python在面向对象的概念中,也有构造函数.它就是 __init__(self) 方法. 其实类似于__init__()这种方法, ...
随机推荐
- 保护SSD,设置Chrome浏览器临时文件夹到ramdisk分区
很多用低端/山寨SSD的朋友都用Ramdisk来保护硬盘,一般都把系统temp目录和IE浏览器临时文件夹目录设到Ramdisk分区了. 最近用谷歌的chrome浏览器,发现浏览网页时候硬盘灯 ...
- WPF 设置了阴影效果后,Y轴位置会有变化的问题
原文:WPF 设置了阴影效果后,Y轴位置会有变化的问题 背景 最近遇到一个动画执行时,文本位置变化的问题.如下图: 如果你仔细看的话,当星星变小时,文本往下降了几个像素. 貌似有点莫名其妙,因为控件之 ...
- 堆(stack) 之 c 和 c++模板实现(空类默认成员函数 初谈引用 内联函数)
//stack 的基本操作 #include <iostream> using namespace std; const int maxn = 3; typedef struct Stac ...
- java学习笔记(7)——I/O流
一.File类 File(File parent, String child); File(Stirng filename); ------------------------------------ ...
- Mac版Visual Studio预览版
来了,Mac版Visual Studio预览版开放下载 投递人 itwriter 发布于 2016-11-17 12:11 评论(7) 有1317人阅读 原文链接 [收藏] « » 微软前俩天宣布,推 ...
- matlab 工具函数(一) —— 添加指定 SNR 的噪声
SNR=PsignalPnoise=10⋅log10∑x=1Nx∑y=1Nyf2(x,y)∑x=1Nx∑y=1Ny(f(x,y)−f^(x,y))2=20⋅log10∥f(x,y)∥∥f^(x,y)− ...
- 构建自己的PHP框架(路由)
完整项目地址:https://github.com/Evai/Aier 上一篇中我们已经建立了一个空的 Composer 项目,本篇将讲述如何构建路由. 下面我们就开始自己来构建路由,先去 GitHu ...
- springboot使用logback日志,部署到tomcat不生效问题解决
1.springboot 配置日志方法 使用该方法配置日志,在本地调试可以正常写入日志文件,但是打包发布到tomcat以后日志配置不生效. 2.修改配置 Spring Boot官方推荐优先使用带有-s ...
- UVA - 825Walking on the Safe Side(dp)
id=19217">称号: UVA - 825Walking on the Safe Side(dp) 题目大意:给出一个n * m的矩阵.起点是1 * 1,终点是n * m.这个矩阵 ...
- WPF - 图形设计器(Diagram Designer)
原文:WPF - 图形设计器(Diagram Designer) OpenExpressApp计划中包括建模工具,计划是采用MetaEdit+模型来作为元模型,使用codeproject的<WP ...