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

作者:oldmao_2001 时间:2022-01-20 10:00:53 

一、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的输入和输出对应关系如下图所示:

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

就是要把一个可迭代的对象按某个规则映射到新的对象上。
因此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的输入和输出对应关系如下图所示:

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


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函数

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


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
相当于每一次计算都是基于前一次计算的结果:

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

还可以为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

标签:Python,高级用法,函数
0
投稿

猜你喜欢

  • Python实现操纵控制windows注册表的方法分析

    2021-10-30 10:16:33
  • python 如何读、写、解析CSV文件

    2022-09-21 13:59:33
  • php计算给定日期所在周的开始日期和结束日期示例

    2023-10-11 12:49:12
  • 删除重复数据的算法

    2024-05-13 09:36:14
  • python生成圆形图片的方法

    2021-04-09 14:48:15
  • 详解用python计算阶乘的几种方法

    2021-11-17 00:00:14
  • js控制div弹出层实现方法

    2023-10-15 05:53:28
  • python 生成图形验证码的方法示例

    2021-10-01 23:31:03
  • 用python 绘制茎叶图和复合饼图

    2023-08-04 10:34:54
  • Go使用Gin+mysql实现增删改查的详细实例

    2024-01-20 20:38:43
  • 用户体验在商业利益面前什么都不是

    2009-06-12 12:07:00
  • python获取http请求响应头headers中的数据的示例

    2023-06-30 14:49:02
  • Node.js中的process.nextTick使用实例

    2024-05-08 09:36:18
  • Python编码类型转换方法详解

    2022-02-19 07:13:54
  • pytorch中的transforms模块实例详解

    2022-04-25 19:50:58
  • 浅析JavaScriptSerializer类的序列化与反序列化

    2024-02-25 17:46:14
  • python清除指定目录内所有文件中script的方法

    2022-04-05 15:59:47
  • 一次MySql重置root密码无效的实战记录

    2024-01-15 07:38:45
  • 详解将DataGrip连接到MS SQL Server的方法

    2024-01-17 00:41:14
  • 关于python DataFrame的合并方法总结

    2022-02-02 14:13:58
  • asp之家 网络编程 m.aspxhome.com