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

张开发
2026/4/19 7:43:35 15 分钟阅读

分享文章

Python进阶之高级用法详细总结
Lambda表达式又被称之为匿名函数格式lambda 参数列表函数体123456defadd(x,y):returnxyprint(add(3,4))#上面的函数可以写成Lambda函数add_lambdalambdax,y:xyadd_lambda(3,4)二、map函数函数就是有输入和输出map的输入和输出对应关系如下图所示就是要把一个可迭代的对象按某个规则映射到新的对象上。因此map函数要有两个参数一个是映射规则一个是可迭代对象。123list1[1,2,3,4,5]rmap(lambdax:xx,list)print(list1(r))结果[2,4,6,8,10]12m1map(lambdax,y:x*xy,[1,2,3,4,5],[1,2,3,4,5])print(list(ml))结果[2,6,12,20,30]三、filter函数filter的输入和输出对应关系如下图所示12345defis_not_none(s):returnsandlen(s.strip())0list2[,,hello,xxxx, None,ai]resultfilter(is_not_none, list2)print(list(result))结果[‘hello,‘xxxx,‘ai]四、reduce函数123fromfunctoolsimportreduceflambdax,y:xy xreduce(f,[1,2,3,4,5])print(r)结果1512345相当于每一次计算都是基于前一次计算的结果还可以为reduce计算添加初始值123fromfunctoolsimportreduceflambdax,y:xy xreduce(f,[1,2,3,4,5],10)print(r)结果251012345五、三大推导式5.1 列表推导式123456789101112131415list1[1,2,3,4,5,6]fmap(lambdax:xx,list1)print(list(f))list2[iiforiinlist1]print(list2)list3[i**3foriinlist1]print(list3)#筛选列表的例子list4[i*4foriinlist1ifi3]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下来然后把列表改成集合1234567891011121314list1{1,2,3,4,5,6}list2{iiforiinlist1}print(list2)list3{i**3foriinlist1}print(list3)#筛选列表的例子list4{i*4foriinlist1ifi3}print(list4)#结果{2,4,6,8,10,12}{64,1,8,216,27,125}#这里是乱序的{16,24,20}5.3 字典推导式123456789101112131415161718192021s{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()ifkey1isi}print(s2)#结果{lisi:15}六、闭包闭包一个返回值是函数的函数1234567importtimedefruntime():defnow_time():print(time.time())returnnow_time#返回值是函数名字fruntime()#f就被赋值为一个函数now_time()了f()#运行f相当于运行now_time()再来看一个带参数的例子假设有一个csv文件内容有三行具体如下a,b,c,d,e1,2,3,4,56,7,8,9,10123456789101112131415defmake_filter(keep):# keep8defthe_filter(file_name):fileopen(filename)#打开文件linesfile.readlines()#按行读取文件file.close()#关闭文件filter_doc[iforiinlinesifkeepini]#过滤文件内容returnfilter_docreturnthe_filterfilter1make_filter(8)#这一行调用了make_filter函数且把8做为参数传给了keep接受了the_filter函数作为返回值#这里的filter1等于函数the_filterfilter_resultfilter1(data.csv)#把文件名data.csv作为参数传给了函数the_filterprint(filter_result)#结果[6,7,8,9,10]七、装饰器、语法糖、注解1234567891011121314151617# 这是获取函数开始运行时间的函数importtimedefruntime(func):defget_time():print(time.time())func()# run被调用returnget_timeruntimedefrun()print(student run)#运行run()#结果当前时间student run由于有装饰器runtime的存在会把run这个函数作为参数丢到runtime(func)里面去如果调整打印时间代码的位置会有不同结果1234567891011121314151617# 这是获取函数结束运行时间的函数importtimedefruntime(func):defget_time():func()# run被调用print(time.time())returnget_timeruntimedefrun()print(student run)#运行run()#结果student run当前时间这里还要注意这里还用到了闭包的概念在运行run函数的时候调用的实际上是get_time函数。对于多个参数的函数如何调用看下面例子123456789101112#有一个参数importtimedefruntime(func):defget_time(i):func(i)# run被调用print(time.time())returnget_timeruntimedefrun(i)print(student run)#运行run(1)123456789101112#有两个参数importtimedefruntime(func):defget_time(i,j):func(i,j)# run被调用print(time.time())returnget_timeruntimedefrun(i,j)print(student run)#运行run(1,2)可以发现这样写对于函数的多态不是很好因此可以写为1234567891011121314151617#自动适配参数importtimedefruntime(func):defget_time(*arg):func(*arg)# run被调用print(time.time())returnget_timeruntimedefrun(i)print(student1 run)runtimedefrun(i,j)print(student2 run)#运行run(1)run(1,2)再次进行扩展更为普适的写法可以解决传入类似i4的关键字参数写法12345678910111213141516171819202122#自动适配参数importtimedefruntime(func):defget_time(*arg,**kwarg):func(*arg,**kwarg)# run被调用print(time.time())returnget_timeruntimedefrun(i)print(student1 run)runtimedefrun(*arg,**kwarg)print(student2 run)runtimedefrun()print(no param run)#运行run(1)run(1,2,j4)run()到此这篇关于Python进阶之高级用法详细总结的文章就介绍到这了

更多文章