当前位置: 首页 > news >正文

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

Lambda表达式又被称之为匿名函数
格式
lambda 参数列表:函数体

1

2

3

4

5

6

defadd(x,y):

returnx+y

print(add(3,4))

#上面的函数可以写成Lambda函数

add_lambda=lambdax,y:x+y

add_lambda(3,4)

二、map函数

函数就是有输入和输出,map的输入和输出对应关系如下图所示:

就是要把一个可迭代的对象按某个规则映射到新的对象上。
因此map函数要有两个参数,一个是映射规则,一个是可迭代对象。

1

2

3

list1=[1,2,3,4,5]

r=map(lambdax:x+x,list)

print(list1(r))

结果:[2,4,6,8,10]

1

2

m1=map(lambdax,y:x*x+y,[1,2,3,4,5],[1,2,3,4,5])

print(list(ml))

结果:[2,6,12,20,30]

三、filter函数

filter的输入和输出对应关系如下图所示:

1

2

3

4

5

defis_not_none(s):

returnsandlen(s.strip())>0

list2=['','','hello','xxxx', None,'ai']

result=filter(is_not_none, list2)

print(list(result))

结果:[‘hello',‘xxxx',‘ai']

四、reduce函数

1

2

3

fromfunctoolsimportreduce

f=lambdax,y:x+y x=reduce(f,[1,2,3,4,5])

print(r)

结果:15=1+2+3+4+5
相当于每一次计算都是基于前一次计算的结果:

还可以为reduce计算添加初始值:

1

2

3

fromfunctoolsimportreduce

f=lambdax,y:x+y x=reduce(f,[1,2,3,4,5],10)

print(r)

结果:25=10+1+2+3+4+5

五、三大推导式

5.1 列表推导式

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

list1=[1,2,3,4,5,6]

f=map(lambdax:x+x,list1)

print(list(f))

list2=[i+iforiinlist1]

print(list2)

list3=[i**3foriinlist1]

print(list3)

#筛选列表的例子

list4=[i*4foriinlist1ifi>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下来,然后把列表改成集合

1

2

3

4

5

6

7

8

9

10

11

12

13

14

list1={1,2,3,4,5,6}

list2={i+iforiinlist1}

print(list2)

list3={i**3foriinlist1}

print(list3)

#筛选列表的例子

list4={i*4foriinlist1ifi>3}

print(list4)

#结果

{2,4,6,8,10,12}

{64,1,8,216,27,125}#这里是乱序的

{16,24,20}

5.3 字典推导式

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

s={

"zhangsan":20,

"lisi":15,

"wangwu":31

}

#拿出所有的key,并变成列表

s_key=[ keyforkey, valueins.items()]

print(s_key)

#结果

['zhangsan','lisi','wangwu']

# 交换key和value位置,注意冒号的位置

s1={ value: keyforkey, valueins.items()}

print(s1)

#结果

{20:'zhangsan',15:'1isi',31:'wangwu'}

s2={ key: valueforkey, valueins.items()ifkey=="1isi"}

print(s2)

#结果

{"lisi":15}

六、闭包

闭包:一个返回值是函数的函数

1

2

3

4

5

6

7

importtime

defruntime():

defnow_time():

print(time.time())

returnnow_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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

defmake_filter(keep):# keep=8

defthe_filter(file_name):

file=open(filename)#打开文件

lines=file.readlines()#按行读取文件

file.close()#关闭文件

filter_doc=[iforiinlinesifkeepini]#过滤文件内容

returnfilter_doc

returnthe_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']

七、装饰器、语法糖、注解

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

# 这是获取函数开始运行时间的函数

importtime

defruntime(func):

defget_time():

print(time.time())

func()# run被调用

returnget_time

@runtime

defrun()

print('student run')

#运行

run()

#结果

当前时间

student run

由于有装饰器@runtime的存在,会把run这个函数作为参数丢到runtime(func)里面去,如果调整打印时间代码的位置会有不同结果:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

# 这是获取函数结束运行时间的函数

importtime

defruntime(func):

defget_time():

func()# run被调用

print(time.time())

returnget_time

@runtime

defrun()

print('student run')

#运行

run()

#结果

student run

当前时间

这里还要注意,这里还用到了闭包的概念,在运行run函数的时候,调用的实际上是get_time函数。

对于多个参数的函数如何调用,看下面例子

1

2

3

4

5

6

7

8

9

10

11

12

#有一个参数

importtime

defruntime(func):

defget_time(i):

func(i)# run被调用

print(time.time())

returnget_time

@runtime

defrun(i)

print('student run')

#运行

run(1)

1

2

3

4

5

6

7

8

9

10

11

12

#有两个参数

importtime

defruntime(func):

defget_time(i,j):

func(i,j)# run被调用

print(time.time())

returnget_time

@runtime

defrun(i,j)

print('student run')

#运行

run(1,2)

可以发现,这样写对于函数的多态不是很好,因此可以写为:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

#自动适配参数

importtime

defruntime(func):

defget_time(*arg):

func(*arg)# run被调用

print(time.time())

returnget_time

@runtime

defrun(i)

print('student1 run')

@runtime

defrun(i,j)

print('student2 run')

#运行

run(1)

run(1,2)

再次进行扩展,更为普适的写法,可以解决传入类似i=4的关键字参数写法:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

#自动适配参数

importtime

defruntime(func):

defget_time(*arg,**kwarg):

func(*arg,**kwarg)# run被调用

print(time.time())

returnget_time

@runtime

defrun(i)

print('student1 run')

@runtime

defrun(*arg,**kwarg)

print('student2 run')

@runtime

defrun()

print('no param run')

#运行

run(1)

run(1,2,j=4)

run()

到此这篇关于Python进阶之高级用法详细总结的文章就介绍到这了

http://www.jsqmd.com/news/664866/

相关文章:

  • Windows Cleaner:3步彻底解决C盘爆红的高效系统清理工具
  • 5分钟快速上手biliTickerBuy:B站会员购抢票工具的终极指南
  • InternLM2-Chat-1.8B数据库智能助手实战:MySQL安装配置与查询优化
  • 崩坏星穹铁道三月七小助手:全自动游戏助手解放你的游戏时间
  • XUnity.AutoTranslator:Unity游戏实时翻译的完整技术指南
  • 从单片机到SoC:如何理解芯片的‘定制化’与‘集成化’演进?
  • 2026海关事务咨询哪家口碑好?行业服务体验参考 - 品牌排行榜
  • QMCDecode终极指南:一键解密QQ音乐加密格式的macOS神器
  • 如何快速掌握TMSpeech:Windows实时语音识别工具的完整攻略 [特殊字符]
  • 别再只会点灯了!用FPGA+74HC595做个可加减的数码管计数器,附完整工程代码
  • 终极指南:如何用ncmdump工具解锁网易云音乐NCM加密格式,重获音乐播放自由
  • 避坑指南:大华海康SDK回调流对接JavaCV的那些‘坑’与优化思路
  • 零基础搞定Youtu-VL-4B-Instruct部署:详解缓存清理与模型路径调整,释放系统盘压力
  • 3分钟快速入门XUnity.AutoTranslator:打破语言壁垒的Unity游戏实时翻译神器
  • Phi-4-mini-reasoning惊艳效果展示:多步代数推导与自然语言总结并存
  • BepInEx终极指南:Unity游戏模组开发框架快速入门教程
  • 2026年AEO认证咨询推荐:企业合规通关专业服务指南 - 品牌排行榜
  • 3074基于单片机的酒精检测联动控制系统设计(温度,风扇)
  • 3075基于单片机的预约保温电饭锅控制系统设计(数码管,矩阵键盘)
  • **NumPy实战进阶:用向量化操作解锁高性能科学计算新姿势**在现代数据科学与机器学习领域,**NumPy** 已成为不
  • 深入理解ValueTask:优化异步调用
  • 3分钟解锁加密音乐:Unlock Music Electron终极使用指南
  • Qwen2.5与ChatGLM4对比评测:轻量模型推理速度PK
  • ChatTTS多语言拓展潜力:除中文外的其他语种适配进展
  • 3073基于单片机的车间环境监测系统设计(光照,温湿度,气体)
  • FlowState Lab入门必看:从零理解波动方程与模型参数映射
  • 2026年开源ShaderPad:轻量高效,助力创意着色器开发!
  • 深入TI C2000 DSP内核:揭秘F28335的流水线、中断与存储空间如何影响你的代码效率
  • 2026年HENF级板材品牌怎么选购?关键要点解析 - 品牌排行榜
  • Win11Debloat深度评测:如何通过注册表级优化实现Windows系统性能提升38%