简化 Python 函数调用的 3 种技巧

使用pyan3和Graphviz绘制函数调用图 pyan3与Graphviz结合使用,快速了解项目。 阅读详情

前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。

PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取

python免费学习资料以及群交流解答点击即可加入


假设有一个函数,这个函数需要接收4个参数,并返回这4个参数的和:

def sum_four(a, b, c, d):
  return a + b + c + d

如果需要固定最后前三个参数,仅改变最后一个参数的值,这时候可能需要这么调用:

>>> a, b, c = 1, 2, 3

>>> sum_four(a=a, b=b, c=c, d=1)
7

>>> sum_four(a=a, b=b, c=c, d=2)
8

>>> sum_four(a=a, b=b, c=c, d=3)
9

>>> sum_four(a=a, b=b, c=c, d=4)
10

这样写实在是太丑了,如果用 Map 函数,是否能简化代码?
答案是肯定的,但是Map函数【一般】只能接受单一元素,如果你强行使用的话,它会报这样的错:

list(map(sum_four, [(1, 2, 3, 4)]))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sum_four() missing 3 required positional arguments: 'b', 'c', and 'd'
怎么解决?

方案1: itertools.starmap

可以使用 itertools 的函数 starmap 替换Map.
它与Map不同,允许接受一个元组作为传入sum_four的参数。

>>> import itertools
>>> list(itertools.starmap(sum_four, [(1, 2, 3, 4)]))
[10]

非常棒,这样的话,上述问题就可以使用starmap函数解决:

>>> import itertools

>>> ds = [1, 2, 3, 4]

>>> items = ((a, b, c, d) for d in ds)

>>> list(items)
 [(1, 2, 3, 1), (1, 2, 3, 2), (1, 2, 3, 3), (1, 2, 3, 4)]

>>> list(itertools.starmap(sum_four, items))
 [7, 8, 9, 10]

请注意 items 是一个生成器,这是为了避免 items 过大导致内存消耗量过大。平时开发的时候注意这些细节,能够使你和普通的开发者拉开差距。

方案2: functools.partial

第二种解决方案是使用 partial 函数固定前三个参数。
根据文档,partial将“冻结”函数的参数的某些部分,从而生成简化版的函数。

因此上述问题的解决方案就是:

>>> import functools
>>> partial_sum_four = functools.partial(sum_four, a, b, c)
>>> partial_sum_four(3)
9
>>> # 这样就可以使用map函数了:
>>> list(map(partial_sum_four, ds))
[7, 8, 9, 10]

方案3: itertools.repeat()

事实上,Map 函数是允许传递可迭代参数的,但是有一个有趣的特点,他会用每个可迭代对象里的项作为传入函数的不同参数。这样说可能太过于抽象了,来看看实际的例子:

>>> list(map(sum_four, [1,1,1,1], [2,2,2,2], [3,3,3,3], [1,2,3,4]))
 [7, 8, 9, 10]

明显,每次都使用了不同数组中对应下标的项传入函数进行计算。
这样,我们可以使用这个特点进行优化。

itertools.repeat() 函数能够根据参数产生一个迭代器,该迭代器一次又一次返回对象。不指定times参数,它将无限期运行。

而 Map 函数会在最短的可迭代对象被迭代完后,就会自动停止运行。
结合这两个特点,上述问题的解决方案就出来了:

>>> import itertools
>>> list(map(sum_four, itertools.repeat(a), itertools.repeat(b), itertools.repeat(c), ds))
 [7, 8, 9, 10]

这招非常巧妙,缺点是能读懂的人不多。不过没关系,计算机世界中某些东西知道就好,你并不一定需要去使用它。

比如本文中的这几种解决方案,日常生活工作中一般用不到,所以你不需要死记硬背,但你需要知道【有这样的问题】和【有这些解决方案】,万一遇到了相似的场景,你就可以回忆起这篇文章并快速找到解决的方法。

简化复杂的Python函数调用 综上所述,通过使用变量存储函数调用结果、拆分长函数调用、使用函数参数默认值和函数链式调用,可以简化复杂的Python函数调用,提高代码的可读性和可维护性。在Python编程中,函数调用是一种常见的操作,但有时候函数调用可能会变得非常复杂,使得代码难以理解和维护。通过应用这些简化复杂函数调用的方法,我们可以改善代码的可读性和可维护性,使其更易于理解和修改。当函数调用过于复杂时,将函数调用的结果存储在一个变量中可以提高代码的可读性。通过在每个步骤之间添加额外的代码,我们可以更好地控制函数调用的逻辑和流程。 阅读详情

相关推荐

Python中的apply函数:简化函数调用的利器

在Python编程中,函数是非常重要的组件,用于封装可重用的代码块。在某些情况下,我们可能需要在函数调用中传递一个可变数量的参数或关键字参数。函数的作用是将参数传递给指定的函数,并执行该函数。这种方式可以简化函数调用的语法,特别是在需要动态生成参数的情况下非常有用。它允许我们以一种紧凑的方式传递参数并调用函数,特别是在需要动态生成参数的情况下非常方便。函数,该函数用于计算给定数字的平方根。最终,函数被成功调用,并输出了相应的结果。函数被成功调用,并输出了相应的结果。函数的用法,并提供相应的源代码示例。

DevPulse的博客 670

python中函数调用时的简化

python中函数调用时的简化,可以使得应用函数灵活便捷,随心所欲

qq_18937049的博客 368

带标签的PHM2009齿轮箱数据集

PHM2009附加数据集—带标签的齿轮箱数据集,可用于测试算法

qq_39379705的博客 4877

Python 简化函数调用的3种技巧

假设有一个函数,这个函数需要接收4个参数,并返回这4个参数的和:defsum_four(a, b, c, d): returna + b + c + d如果需要固定最后前三个参数...

Python实用宝典网 526

Linux内核支持串口屏,linux串口触摸屏设计总结

Linux serial touch 设计总结概述:最近在做嵌入式linux下串口触摸屏设计,遇到一些问题,经过查找资料和请教同事,总算把问题解决了,事后有把linux相关的内核代码仔细看了一遍,为了有点成果,特别写了个总结。如有任何问题请联系yxj_5421@http://www.doczj.com/doc/87b94b1e227916888486d76d.html,转载请标明出处。系统资源:L...

weixin_39935903的博客 1297

基于知识图谱的旅游推荐系统

这一系统整合了当今先进的数据技术:采集携程等大型平台的景点数据,通过爬虫技术源源不断地获取最新的旅游信息。此外,我们采用Neo4j图数据库来存储和处理这些数据,结合自然语言处理技术,为你提供精准的旅游建议。:通过直观的知识图谱展示,了解各个景点之间微妙的联系,无论是文化背景还是地理方位,你都能从中发现新的旅行灵感。准备毕业设计的同学,关注我们,这是一个集成了多种前沿技术的项目,为你的学术成果锦上添花。:不再浪费时间,系统根据你的偏好和历史评分,利用协同过滤技术推荐适合的旅游目的地。

qalangtao的博客-qalangtao.com 774

Python函数:简化代码、提高效率的利器

函数是一段可重复使用的代码块,用于执行特定的任务。在Python中,函数的定义使用关键字"def",后跟函数名和参数列表。函数名应该具有描述性,以便更好地理解函数的功能。函数体由冒号和缩进的代码块组成。")在上述示例中,我们定义了一个名为"greet"的函数,它接受一个参数"name"。函数体中的代码将打印出"Hello, name!“,其中"name"是传递给函数的实际参数。最后一行代码调用了函数"greet”,并将字符串"Alice"作为参数传递给它。

xiaoganbuaiuk的博客 1167

手把手教你用Wireshark抓包分析BLE广播包:从PDU结构到AD Type实战解析

本文详细介绍了如何使用Wireshark工具抓取并分析BLE广播包,从PDU结构到AD Type的实战解析。通过硬件设备选择、软件配置、协议栈解析及高级故障排查,帮助开发者深入理解蓝牙低功耗通信机制,提升物联网设备调试效率。

weixin_30482383的博客 418

让你程序事半功倍的python便捷函数用法大全

python各种用法大全查询笔记,time模块、random、 type(参数)、print()、round()、input()、 append()、len()、元组、pop()、extend()、sort()、reverse()、range()函数、bool()、连接语句、格式化字符串、format()、 join()、index()、try语法、return语句、⾃定义函数、读写⽂件格式规范、readlines()、writelines()、split()、join()、dir()、csv模块,望有用~

weixin_53919192的博客 2930

医疗设备安规入门:一张图搞懂BF型设备的MOOP/MOPP绝缘路径(附GB 9706.1附录解析)

本文深入解析了BF型医疗设备的MOOP/MOPP绝缘路径设计,结合GB 9706.1标准附录J的实战应用,帮助工程师快速掌握医疗设备安规要点。通过典型绝缘路径图分析,详细对比了MOOP与MOPP的防护差异,并提供了海拔修正、漏电流测试等关键设计指南,助力医疗设备安全合规。

weixin_30633405的博客 393

SAP 打印输出中 `#` 字符替代日文汉字的根本原因与全面解决方案

只要认清设备类型 / 字符集 / 字体三角关系,并合理利用PDFUCSWINCF或 UPE + URDT,LP01里那些恼人的就会彻底消失,日文汉字将在纸面与 PDF 中如预览一样完美呈现。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 818

Python中那些简化代码的方法~ if、for、lambda

总结了一些python代码的简化写法,涉及到了 if、for、sum、lambda、map、filter、reduce 的配合使用方法~

每次积累一丢丢,最后变成亿大丢 ..O(*^▽^*)O 1677

Sigrity Power Tree如何进行直流压降仿真分析操作指导

Sigrity Power Tree模式可以用于前仿真,在没有layout文件的情况下对电源进行直流压降仿真分析,用于评估原理图设计以及器件选型是否合理。Model:设置为Equal Current,设置为等电源模型,意思该负载每个电源pin都是等电流的。Current:设置每个负载的电流,U30为3A,U3-U6各为1A。Nominal Current:设置能够承载的最大电流,设置为10A。Upper/ Lower Tol:设置为压降范围为5%Output Current:设置输出电流为10A。

weixin_54787054的博客 733

python怎么调用类里面的函数_简化 Python 函数调用的 3 种技巧

点击上方“Python编程时光”,选择“加为星标”第一时间关注Python技术干货!假设有一个函数,这个函数需要接收4个参数,并返回这4个参数的和:defsum_four(a, b, c, d):returna + b + c + d如果需要固定最后前三个参数,仅改变最后一个参数的值,这时候可能需要这么调用:>>> a, b, c = 1, 2, 3>&g...

weixin_39930252的博客 578

【100分】最长子字符串的长度

题目要求在一个环形字符串中找出字符 ‘o’ 出现了偶数次的最长子字符串长度。这里的字符串是一个环形的,即首尾相连。代码统计了字符串中字符 ‘o’ 的出现次数,并根据其奇偶性返回相应的最长子字符串长度。当 ‘o’ 的数量为偶数时,直接返回字符串长度;当 ‘o’ 的数量为奇数时,返回长度减去 1。给你一个字符串 s,字符串s首尾相连成一个环形 ,请你在环中找出 ‘o’ 字符出现了偶数次最长子字符串的长度。【最长子字符串的长度】

weixin_54707168的博客 898

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

python starmap_简化Python函数调用的3种技巧

原标题:简化Python函数调用的3种技巧大家好,欢迎来到 Crossin的编程教室 !今天给大家分享一个关于编程技巧的讨论。假设有一个函数,这个函数需要接收4个参数,并返回这4个参数的和:defsum_four(a, b, c, d):returna + b + c + d如果需要固定最后前三个参数,仅改变最后一个参数的值,这时候可能需要这么调用:>>>a, b, c = 1,...

weixin_42309773的博客 1517

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

python分数化简_Python 简化函数调用的3种技巧

假设有一个函数,这个函数需要接收4个参数,并返回这4个参数的和:def sum_four(a, b, c, d):return a + b + c + d如果需要固定最后前三个参数,仅改变最后一个参数的值,这时候可能需要这么调用:>>> a, b, c = 1, 2, 3>>> sum_four(a=a, b=b, c=c, d=1)7>>> ...

weixin_33462540的博客 1539

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

python的方法调用_Python 简化函数调用的3种技巧

假设有一个函数,这个函数需要接收4个参数,并返回这4个参数的和:def sum_four(a, b, c, d):return a + b + c + d如果需要固定最后前三个参数,仅改变最后一个参数的值,这时候可能需要这么调用:>>> a, b, c = 1, 2, 3>>> sum_four(a=a, b=b, c=c, d=1)7>>> ...

weixin_39746382的博客 107

python中process函数调用不了函数_简化 Python 函数调用的 3 种技巧

点击上方“Python编程时光”,选择“加为星标”第一时间关注Python技术干货!假设有一个函数,这个函数需要接收4个参数,并返回这4个参数的和:defsum_four(a, b, c, d):returna + b + c + d如果需要固定最后前三个参数,仅改变最后一个参数的值,这时候可能需要这么调用:>>> a, b, c = 1, 2, 3>&g...

weixin_39564036的博客 393

教你几招冷门!但是很有用的Python招数!

Python 目前是最火最流行的语言之一。 它以其简单的语法和强大的功能,受到很多同学的喜欢。最爽的是它有强大的库和社区支持,让你开发应用非常方便快捷。 今天粒粒本粒给大家分享几招,平时不常用有点冷门,但是非常有用的招数,大家赶紧拿起电脑操练起来8~ 01.Named Tuples 命名元组是易于创建的轻量级对象类型。它是 Python Collections模块中可用的工厂函数。如果你想要一个类来管理数据,你可以考虑使用命名元组作为替代。所以想学的同学,有必要听一下这位老师的课、领取python福利奥.

MC_XY的博客 177

Python进阶小技巧2

上一篇进阶小技巧阅读量尚可,给了我再写一篇的动力。这回讲一下:偏函数、强制关键字参数和字典相关的技巧。

shayuchaor的博客 6203

Python开发简化代码的六大技巧

Python开发代码简化除了采用规范化的编程规则之外,代码编写的逻辑性和对内置规则的掌握也对其有一定的影响,以下是Python3支持的用法,合理的利用可以极大的简化代码的书写复杂度。 1. 列表推导式 对于一组列表,如果想让其所有元素翻倍,很多人都会采用以往比较经典的写法,其实Python中有更精简的办法,实例如下: 以往做法: num = [1, 3, 5, 7, 9] for i...

IT技术交流分享 182

Python 高阶内容:简化代码的终极技巧

在编写 Python 代码时,我们总是希望能用更少的代码完成更多的功能。本文将带你深入了解一些常用的 Python **高阶内容**和“偷懒”用法。这些技巧不仅能让你的代码更加简洁易读,还能显著提升开发效率。我们会探讨 Lambda 表达式的简化函数写法,一行 `for` 循环的使用,`if-else` 的简写模式,以及 `enumerate` 和 `zip` 让你优雅地遍历和处理数据。除此之外,文章还介绍了多种列表和字典的生成方式,并展示了如何 快速翻转列表。

敲代码别忘了喝上一杯凉白开。 1728

Python简化操作技巧

Python开发代码简化除了使用标准化编程规则外,代码编写的逻辑和内置规则的掌握也对它有一定的影响。合理使用可以大大简化代码的编写、复杂性。 列表理解 对于一组列表,如果要将其所有元素加倍,许多人将使用过去更经典的写法。事实上,Python中有更多简化的方法。例如下: 过去的做法: 数字=[1,3,5,7,9] 对于范围内的i(len(num)): Num [i]=num [i] * 3 Pyth...

bilibili_Posion的博客 272
上一篇: 用 Python 开发一个 【个人计划 todolist】
下一篇: 精心整理!9个 Python 实用案例分享
酸菜鱼编程
博客等级 码龄6年 155粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值