我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python进阶之高级用法详细总结

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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()

到此这篇关于Python进阶之高级用法详细总结的文章就介绍到这了,更多相关Python高级用法内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python进阶之高级用法详细总结

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python进阶之多线程的实现方法总结

在python中主要有两种实现多线程的方式:通过threading.Thread () 方法创建线程和通过继承 threading.Thread 类的继承重写run方法,接下来我们分别说一下多线程的两种实现形式吧
2023-05-16

Python进阶:切片的误区与高级用法

2018-12-31 更新声明:切片系列文章本是分三篇写成,现已合并成一篇。合并后,修正了一些严重的错误(如自定义序列切片的部分),还对行文结构与章节衔接做了大量改动。原系列的单篇就不删除了,毕竟也是有单独成篇的作用。特此声明,请阅读改进版
2023-01-30

Python 字典进阶:探索高级用法,解锁新境界

Python字典是强大的数据结构,它能为您存储和检索数据。了解字典的高级用法,包括嵌套字典、字典操作和高级搜索技巧,可以解锁字典的全部潜力,并帮助您编写更强大、更有效的Python程序。
Python 字典进阶:探索高级用法,解锁新境界
2024-02-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录