首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

大家好,欢迎来到 Crossin的编程教室 !

今天给大家分享一个关于编程技巧的讨论。

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

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

这样写实在是太丑了,如果用 Map 函数,是否能简化代码?

答案是肯定的,但是Map函数“一般”只能接受单一元素,如果你强行使用的话,它会报这样的错:

怎么解决?

方案1: itertools.starmap

可以使用 itertools 的函数 starmap 替换Map.

它与Map不同,允许接受一个元组作为传入sum_four的参数。

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

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

方案2: functools.partial

第二种解决方案是使用 partial 函数固定前三个参数。

根据文档,将“冻结”函数的参数的某些部分,从而生成简化版的函数。

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

方案3: itertools.repeat()

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

明显,每次都使用了不同数组中对应下标的项传入函数进行计算。

这样,我们可以使用这个特点进行优化。

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

而 Map 函数会在最短的可迭代对象被迭代完后,就会自动停止运行。

结合这两个特点,上述问题的解决方案就出来了:

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

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

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210204A05WGJ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券