Python进阶之高级用法详细总结
作者:oldmao_2001 发布时间:2022-01-20 10:00:53
标签:Python,高级用法,函数
一、Lambda表达式
Lambda表达式又被称之为匿名函数
格式
lambda 参数列表:函数体
def add(x,y):
return x+y
print(add(3,4))
#上面的函数可以写成Lambda函数
add_lambda=lambda x,y:x+y
add_lambda(3,4)
二、map函数
函数就是有输入和输出,map的输入和输出对应关系如下图所示:
就是要把一个可迭代的对象按某个规则映射到新的对象上。
因此map函数要有两个参数,一个是映射规则,一个是可迭代对象。
list1=[1,2,3,4,5]
r=map(lambda x:x+x,list)
print(list1(r))
结果:[2,4,6,8,10]
m1=map(lambda x,y:x*x+y,[1,2,3,4,5],[1,2,3,4,5])
print(list(ml))
结果:[2,6,12,20,30]
三、filter函数
filter的输入和输出对应关系如下图所示:
def is_not_none(s):
return s and len(s.strip())>0
list2=['','','hello','xxxx', None,'ai']
result=filter(is_not_none, list2)
print(list(result))
结果:[‘hello',‘xxxx',‘ai']
四、reduce函数
from functools import reduce
f=lambda x,y:x+y x=reduce(f,[1,2,3,4,5])
print(r)
结果:15=1+2+3+4+5
相当于每一次计算都是基于前一次计算的结果:
还可以为reduce计算添加初始值:
from functools import reduce
f=lambda x,y:x+y x=reduce(f,[1,2,3,4,5],10)
print(r)
结果:25=10+1+2+3+4+5
五、三大推导式
5.1 列表推导式
list1=[1,2,3,4,5,6]
f=map(lambda x:x+x,list1)
print(list(f))
list2=[i+i for i in list1]
print(list2)
list3=[i**3 for i in list1]
print(list3)
#筛选列表的例子
list4=[i*4 for i in list1 if i>3]
print(list4)
#结果
[2,4,6,8,10,12]
[2,4,6,8,10,12]
[1,8,27,64,125,216]
[16,25,36]
5.2 集合推导式
直接把上面代码copy下来,然后把列表改成集合
list1={1,2,3,4,5,6}
list2={i+i for i in list1}
print(list2)
list3={i**3 for i in list1}
print(list3)
#筛选列表的例子
list4={i*4 for i in list1 if i>3}
print(list4)
#结果
{2, 4, 6, 8, 10, 12}
{64, 1, 8, 216, 27, 125}#这里是乱序的
{16, 24, 20}
5.3 字典推导式
s={
"zhangsan":20,
"lisi":15,
"wangwu":31
}
#拿出所有的key,并变成列表
s_key=[ key for key, value in s.items()]
print(s_key)
#结果
['zhangsan','lisi','wangwu']
# 交换key和value位置,注意冒号的位置
s1={ value: key for key, value in s.items()}
print(s1)
#结果
{20:'zhangsan',15:'1isi',31:'wangwu'}
s2={ key: value for key, value in s.items() if key=="1isi"}
print(s2)
#结果
{"lisi":15}
六、闭包
闭包:一个返回值是函数的函数
import time
def runtime():
def now_time():
print(time.time())
return now_time #返回值是函数名字
f=runtime()#f就被赋值为一个函数now_time()了
f()#运行f相当于运行now_time()
再来看一个带参数的例子:
假设有一个csv文件,内容有三行,具体如下:
a,b,c,d,e
1,2,3,4,5
6,7,8,9,10
def make_filter(keep):# keep=8
def the_filter(file_name):
file=open(file name)#打开文件
lines=file.readlines()#按行读取文件
file.close()#关闭文件
filter_doc=[i for i in lines if keep in i]#过滤文件内容
return filter_doc
return the_filter
filter1=make_filter("8")#这一行调用了make_filter函数,且把8做为参数传给了keep,接受了the_filter函数作为返回值
#这里的filter1等于函数the_filter
filter_result=filter1("data.csv")#把文件名data.csv作为参数传给了函数the_filter
print(filter_result)
#结果
['6,7,8,9,10']
七、装饰器、语法糖、注解
# 这是获取函数开始运行时间的函数
import time
def runtime(func):
def get_time():
print(time.time())
func()# run被调用
return get_time
@runtime
def run()
print('student run')
#运行
run()
#结果
当前时间
student run
由于有装饰器@runtime的存在,会把run这个函数作为参数丢到runtime(func)里面去,如果调整打印时间代码的位置会有不同结果:
# 这是获取函数结束运行时间的函数
import time
def runtime(func):
def get_time():
func()# run被调用
print(time.time())
return get_time
@runtime
def run()
print('student run')
#运行
run()
#结果
student run
当前时间
这里还要注意,这里还用到了闭包的概念,在运行run函数的时候,调用的实际上是get_time函数。
对于多个参数的函数如何调用,看下面例子
#有一个参数
import time
def runtime(func):
def get_time(i):
func(i)# run被调用
print(time.time())
return get_time
@runtime
def run(i)
print('student run')
#运行
run(1)
#有两个参数
import time
def runtime(func):
def get_time(i,j):
func(i,j)# run被调用
print(time.time())
return get_time
@runtime
def run(i,j)
print('student run')
#运行
run(1,2)
可以发现,这样写对于函数的多态不是很好,因此可以写为:
#自动适配参数
import time
def runtime(func):
def get_time(*arg):
func(*arg)# run被调用
print(time.time())
return get_time
@runtime
def run(i)
print('student1 run')
@runtime
def run(i,j)
print('student2 run')
#运行
run(1)
run(1,2)
再次进行扩展,更为普适的写法,可以解决传入类似i=4的关键字参数写法:
#自动适配参数
import time
def runtime(func):
def get_time(*arg,**kwarg):
func(*arg,**kwarg)# run被调用
print(time.time())
return get_time
@runtime
def run(i)
print('student1 run')
@runtime
def run(*arg,**kwarg)
print('student2 run')
@runtime
def run()
print('no param run')
#运行
run(1)
run(1,2,j=4)
run()
来源:https://blog.csdn.net/oldmao_2001/article/details/116750720
0
投稿
猜你喜欢
- 在多数的现代语音识别系统中,人们都会用到频域特征。梅尔频率倒谱系数(MFCC),首先计算信号的功率谱,然后用滤波器和离散余弦变换的变换来提取
- 效果展示:程序简介1.使用pygame模组2.在material目录下有一些素材3.吃豆人的游戏主体4.吃豆人怪物的AI(未使用深度学习)主
- 本文实例讲述了python实现清屏的方法。分享给大家供大家参考。具体分析如下:一试:>>> import os>&g
- 目录前言什么是装饰器Python 函数的基本特性函数名的本质:将函数作为变量使用:进一步实现装饰器使用Python装饰器语句:总结前言在 p
- 前言数据来源:population_data.json,先看一下数据长啥样[ { "Coun
- 在网上找到的随机不重复查询代码:select top 15 * from article&
- 以图像处理见长的微软Live实验室,最近发布了一款新作:Pivot。装完启动后的第一印象就是一款浏览器,和IE、FF、Chrome又不太一样
- 阅读上一篇:你是真正的用户体验设计者吗? Ⅱ系统和用户环境设计苹果系统成功在于系统架构。简化系统本身,设备只能变得更好、更小、性能更强大。在
- 目录瞎比比与 print 相比 logging 有什么优势?基础用法保存到文件多模块使用 logging使用配置文件配置 logging瞎比
- 本文实例讲述了Python树莓派学习笔记之UDP传输视频帧操作。分享给大家供大家参考,具体如下:因为我在自己笔记本电脑上没能成功安装Open
- 我们这里所说的head区域,是指页页html代码的<head>和</head>之间的内容。在以前的文章中,主要介绍了
- 函数名:FenYe(url,pageCount,recordCount,curPage,cssstyle)  
- 问题说明最近在写爬虫,由于单个账号访问频率太高会被封,所以需要在爬虫执行一段时间间隔后自己循环切换账号所以就在想,有没有像单片机那样子设置一
- py文件不是html文件,当然不能在浏览器里打开。py文件可以用任何编辑器打开,py文件是和txt一样都是普通的文本文件,只是python解
- 业务场景:前后端分离需要对接数据接口。接口测试是在postman做的,今天才开始和前端对接,由于这是我第一次做后端接口开发(第一次嘛,问题比
- 来到杭州,迅速租了房子,扫了日常用品。再非专业地提前体验一下与工作有那么一点点点点点相关的UED(用户体验设计)。良好的用户体验是一种非必须
- 安装python虚拟环境核心目的就是为了复制一个python环境,这样新项目下载的所有包,都会存放在虚拟环境下的python site-pa
- 在网页上,有一些内容是通过执行Ajax请求动态加载数据渲染出来的。对于需要获取这些内容的需求,我们可以使用Python来实现数据的抓取。Aj
- 一年中秋至 又见圆月时导语假设农历八月十五,程序员错过了今年的中秋圆月。▼程序员的苦只有他们寄几知道bug,bug,bug,bug,bug,
- 五种Python下划线模式速查表:单前导下划线:_var当涉及到变量和方法名称时,单个下划线前缀有一个约定俗成的含义。 它是对程序员的一个提