脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Python - 真Python技巧实战应用,函数参数自动收集并批量处理

真Python技巧实战应用,函数参数自动收集并批量处理

2023-12-11 15:15数据大宇宙 Python

本文分享一个关于Python的实用小技巧,理解函数参数自动收集并批量处理。

前言

分享一个最近发现的实用小技巧。有时候我会封装一下别人的库中的某个功能函数,比如下面是一个第三方库的函数:

真Python技巧实战应用,函数参数自动收集并批量处理

函数的参数非常多。而我需要自定义一个与它参数一样的函数,里面做一些小处理后,调用它的原函数:

真Python技巧实战应用,函数参数自动收集并批量处理

  • 为了让函数有智能提示,这里不能使用 *args 与 **kws 收集参数
  • 把传入的字符串处理一下

这里的问题是,难道我一定要把参数逐一传入原函数吗?

  • 上面的第29行代码能不能简化?
  • 代码 行 24-27 的处理能不能简化?

我们首先要知道一点,函数的参数,其实与我们普通定义的变量没有多大差别。区别只是函数参数只是从外部指定值。

既然函数的参数是普通的变量,那么很自然我们可以想到使用内置函数 locals 获取本地变量字典:

真Python技巧实战应用,函数参数自动收集并批量处理

  • 行24:利用 locals 函数获取所有参数的字典
  • 行26:利用 ** 解包传参调用

非常简单地解决了问题。不过这里注意,最好在函数一开始的时候就做这个事情。这是因为如果在执行 locals 之前,你自己在函数中定义了变量,那么也会保存在 locals 里面。

真Python技巧实战应用,函数参数自动收集并批量处理

  • 行24:不能在调用 locals 之前定义变量

其实有了参数字典,批量处理字符串参数的问题就很容易解决。

真Python技巧实战应用,函数参数自动收集并批量处理

虽然这里没有什么问题,但是通常来说,我们不应该在遍历时修改原字典。可以换成推导式或复制再修改

但是,现在我有好几个这种间接调用的函数。难道每一个我都要像上面那样写一大串代码吗?

我一开始也想到,这不是很简单事情吗,把上面的代码抽出来,到一个函数就可以:

真Python技巧实战应用,函数参数自动收集并批量处理

需要时,调用即可:

真Python技巧实战应用,函数参数自动收集并批量处理

真的可以吗?

显然不行。因为调用 locals 时,函数 strip_str_args 根本没有任何参数!

办法总比困难多,既然不能直接使用 locals ,那就让外面传进来吧:

真Python技巧实战应用,函数参数自动收集并批量处理

调用的时候就需要使用 locals:

真Python技巧实战应用,函数参数自动收集并批量处理

还能不能再简化?每次都要传入 locals ,不符合我的"懒人"风格。

以前我就有两篇文章讲解过调用栈。当 python 每次进入一个函数,都会启用一个"帧栈",用于保存当前函数执行过程中的信息。这些信息当然包括了定义的变量。

其实 locals 函数就是从当前 "帧栈" 获取的数据:

真Python技巧实战应用,函数参数自动收集并批量处理

  • 行16:导入 inspect 模块
  • 行20:获取当前帧栈
  • 行24: cur_frame.f_back 获取上一层帧栈,就是调用这个函数的人的环境信息。 f_locals 相当于获得了外部传进来的 locals 字典

现在调用则很简单了:

真Python技巧实战应用,函数参数自动收集并批量处理

  • 要确保在函数一开始调用

目前,还有一个限制,"确保在函数一开始调用" 。

这个限制能去掉吗?

原文地址:https://mp.weixin.qq.com/s?__biz=MzUzNDk1MTc5Mw==&mid=2247486913&idx=1&sn=bd91f40ac9dad170b17581453f5083bf

延伸 · 阅读

精彩推荐
  • PythonPython3实现的反转单链表算法示例

    Python3实现的反转单链表算法示例

    这篇文章主要介绍了Python3实现的反转单链表算法,结合实例形式总结分析了Python基于迭代算法与递归算法实现的翻转单链表相关操作技巧,需要的朋友可以参...

    zhenghaitian11332021-06-05
  • Pythonpython将txt等文件中的数据读为numpy数组的方法

    python将txt等文件中的数据读为numpy数组的方法

    今天小编就为大家分享一篇python将txt等文件中的数据读为numpy数组的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    liubo1875212021-05-06
  • PythonNumpy中创建数组的9种方式小结

    Numpy中创建数组的9种方式小结

    本文主要介绍了Numpy中创建数组的9种方式小结,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Dream丶Killer10982022-10-19
  • PythonPython编程中对文件和存储器的读写示例

    Python编程中对文件和存储器的读写示例

    这篇文章主要介绍了Python编程中对文件和存储器的读写示例,包括使用cPickle储存器存储对象的例子,需要的朋友可以参考下...

    lixiang05223172020-08-10
  • Pythonpython批量下载壁纸的实现代码

    python批量下载壁纸的实现代码

    本文主要讲解python批量下载壁纸的实现代码,壁纸来自桌酷网站,所有权归属其网站,本代码仅做为交流学习使用,请勿用于商业用途,否则后果自负。...

    python代码网3622020-06-04
  • Pythonpython的Tqdm模块的使用

    python的Tqdm模块的使用

    这篇文章主要介绍了python的Tqdm模块的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    langb20149512021-01-03
  • Pythonpython版简单工厂模式

    python版简单工厂模式

    这篇文章主要为大家详细介绍了python版简单工厂模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    金手指三脚猫4892020-12-11
  • PythonPython3 全自动更新已安装的模块实现

    Python3 全自动更新已安装的模块实现

    这篇文章主要介绍了Python3 全自动更新已安装的模块实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋...

    COCO565462020-05-09