Python functools冻结参数小技巧实现代码简洁优化

 更新时间:2023年12月11日 10:03:31   作者:高端章鱼哥  
这篇文章主要为大家介绍了Python functools冻结参数小技巧实现代码简洁优化示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

Python functools

Python有一些非常使用的模块, functools 就是其中之一。今天我们来说说其中的 partial 函数, partial 函数看起来平平无奇,如果你经常翻看高手们写的库,会发现很多地方都在使用这函数。

使用场景

我们从一个小场景开始。

现在我们需要读取一个 txt 文件:

with open('文件1.txt',mode='r',encoding='utf8') as f:
    print(f.readline())

如果同时加载 2 个文件:

with open('文件1.txt',mode='r',encoding='utf8') as f:
    print(f.readline())
with open('文件2.txt',mode='r',encoding='utf8') as f:
    print(f.readline())

初学者都能看出来,这代码很多重复的内容,怎么简化?

简化方式

方式 1:

def my_open_file(file):
    return open(file,mode='r',encoding='utf8')
with my_open_file('文件1.txt') as f:
    print(f.readline())
with my_open_file('文件2.txt') as f:
    print(f.readline())

思路很简单,把重复的函数整个提到自定义函数里面,把变化的文件路径定义成参数。

方式 2:

open_kws = {'mode':'r','encoding':'utf8'}
with open('文件1.txt',**open_kws) as f:
    print(f.readline())
with open('文件2.txt',**open_kws) as f:
    print(f.readline())

利用 python 的字典解包入参,从参数上提取。

这些方式都略显麻烦。

方式 2 有其应用场景,以后再展开讲解。

冻结参数

"出场仪式"还是需要的:

from functools import partial

类似前面的方式 1, partial  函数提供了一个更简洁的方式

my_open_file = partial(open,mode='r',encoding='utf8')
with my_open_file('文件1.txt') as f:
    print(f.readline())
with my_open_file('文件2.txt') as f:
    print(f.readline())
  • partial 第一个参数传入需要"冻结参数" 的目标函数 open
  • 后面接的参数,就像在调用 open 函数一样设置即可

上面我们使用关键字设置参数,当然也可以按位置传入参数,或者混合使用。

def show_nums(a,b,c):
    print(a,b,c)
show_free_c = partial(show_nums,1,2)
show_free_c(3) # >>> 1 2 3
show_free_b = partial(show_nums,1,c=3)
show_free_b(2) # >>> 1 2 3

接下来就要说说 partial 的小缺点。

不是函数

partial 生成的是一个 partial 对象,他不是函数对象,这意味着它生成出来的东西丢失了函数说明。

现在为之前例子中的函数加上一些注释:

可以看到在 vscode 上可以正常显示信息。但是经过 partial 得到的新函数却什么都看不到:

所以一般情况下,我们都是在一个局部小范围内使用 partial ,比如在自定义模块内部使用,尽可能避免让 partial 生成的对象供外部的调用者直接使用。

以上就是Python functools冻结参数小技巧实现代码简洁优化的详细内容,更多关于Python functools优化代码的资料请关注脚本之家其它相关文章!

相关文章

  • python3实现绘制二维点图

    python3实现绘制二维点图

    今天小编就为大家分享一篇python3实现绘制二维点图,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • Python数据可视化制作全球地震散点图

    Python数据可视化制作全球地震散点图

    这篇文章主要介绍了Python数据可视化制作全球地震散点图,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-08-08
  • Python实现Windows风格文件夹自然排序的全攻略

    Python实现Windows风格文件夹自然排序的全攻略

    在Windows资源管理器中,文件夹排序遵循自然数值逻辑:11-1会排在11之后而非2之前,file10.txt会排在file2.txt之后,本文将详细解析如何在Python中实现这种智能排序,需要的朋友可以参考下
    2025-10-10
  • Python批量操作Excel文件详解

    Python批量操作Excel文件详解

    因为博主所在的地方,需要每周整理全校的青年大学习数据,Excel操作本身不难,但是这种毫无意义的体力劳动做久了就会很无趣,刚好我想起来上学期接触过Python,想着能不能试一下,取代这种无意义的劳动
    2021-11-11
  • python pandas移动窗口函数rolling的用法

    python pandas移动窗口函数rolling的用法

    今天小编就为大家分享一篇python pandas移动窗口函数rolling的用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • python实现带界面的井字棋小游戏

    python实现带界面的井字棋小游戏

    这篇文章我们主要介绍的是python实现带界面的井字棋小游戏,从安装tkinter开始,然后初始化窗口,定义按钮即查找获胜条件,想具体了解的小伙伴可以参考下文,附有详细代码
    2021-09-09
  • Python演化计算基准函数详解

    Python演化计算基准函数详解

    这篇文章主要介绍了Python演化计算基准函数,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧,希望能够给你带来帮助
    2021-10-10
  • Python利用XPath的逻辑运算符实现多条件定位

    Python利用XPath的逻辑运算符实现多条件定位

    XPath作为一种强大的定位语言,能够通过复杂的条件组合精准定位目标元素,本文将结合实际案例,详细解析如何在Python中利用XPath的逻辑运算符实现多条件定位,希望对大家有所帮助
    2026-04-04
  • pytorch loss反向传播出错的解决方案

    pytorch loss反向传播出错的解决方案

    这篇文章主要介绍了pytorch loss反向传播出错的解决方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • python实现扑克牌交互式界面发牌程序

    python实现扑克牌交互式界面发牌程序

    这篇文章主要介绍了python实现扑克牌交互式界面发牌程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04

最新评论