如何在Python中使用算子模块?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
1计算函数
假设我们需要一个计算阶乘的函数,一般做法是使用递归。如果使用函数式编程,可以有两种方式,一种λ,另一种使用算子模块中的算术函数。我们做个比较。
首先使用λ方式来实现:
得到functools import 减少 def 事实(n): return 才能减少(lambda a, b:, a *, b,,范围(1,n +, 1))
这里用到了减少方法,减少()函数语法:<代码>减少(函数,iterable(初始化))> 代码。其中函数的函数有两个参数.reduce()函数会先对集合中的第1,2个元素进行功能函数处理,得到的结果再与第三个元素进行功能函数处理,最后得到一个结果1 .
减少()函数中的功能使用λ表达式。第二个入参iterable使用范围()方法来生成。
接着使用算子模块中的mul函数来实现阶乘:
得到operator import mul def factWithMul (n): return 才能减少(mul,范围(1,n +, 1))
相对来说,使用算子模块中的计算函数,代码更加简洁。
从源码上分析,mul函数就是计算两个入参的乘积:
def mul (a, b): “才能Same as  a *, b !” return 才能;a *, b
操作符模块内部还定义了很多类似的计算函数,比如:
得到operator import itemgetter metro_areas =,((& # 39;东京# 39;,,& # 39;摩根大通# 39;,,36.933,(35.689722,139.691667),,(& # 39;Delhi  ncr # 39;,, & # 39;上# 39;,,21.935,(28.613889,77.208889)), ,,,,,,,(& # 39;Mexico 城市# 39;,,& # 39;mx # 39;,, 20.142, (19.433333, -99.133333)), ,,,,,,,(& # 39;New  York-Newark& # 39;,, & # 39;我们# 39;,,20.104,(40.808611,-74.020386)), ,,,,,,,(& # 39;Sao 保罗# 39;,,& # 39;br # 39;,, 19.649, (-23.547778, -46.635833)), ,,,,,,,) for city 拷贝排序(metro_areas,关键=itemgetter (1)): logging.info才能(& # 39;city →, % & # 39;,,市)
运行结果:
INFO 作用;city →, (& # 39; Sao 保罗# 39;,,& # 39;br # 39;,, 19.649, (-23.547778, -46.635833)) INFO 安康;city →, (& # 39; Delhi  ncr # 39;,, & # 39;上# 39;,,21.935,(28.613889,77.208889)) →INFO 安康;city (& # 39;东京# 39;,,& # 39;摩根大通# 39;,,36.933,(35.689722,139.691667)) →INFO 安康;city (& # 39; Mexico 城市# 39;,,& # 39;mx # 39;,, 20.142, (19.433333, -99.133333)) INFO 安康;city →, (& # 39; New  York-Newark& # 39;,, & # 39;我们# 39;,,20.104,(40.808611,-74.020386))
城市数据数组中的每一个元素,拆分来看,就是元组形式。itemgetter函数取出元组的第二个值作为排序函数的排序依据。
如果传入itemgetter的入参不止一个,那么它就是一个过滤函数,只把需要的列过滤出来。
比如我们只需要城市数组中的城市简称与所在坐标,就可以这么做:
cc_name =, itemgetter (1,, 3) for city  metro_areas拷贝: logging.info (& # 39; city →, % & # 39;,, cc_name(市)
运行结果:
INFO 作用;city →,(& # 39;摩根大通# 39;,,(35.689722,139.691667)) →INFO 安康;city (& # 39;上# 39;,,(28.613889,77.208889)) →INFO 安康;city (& # 39; mx # 39;,, (19.433333, -99.133333)) →INFO 安康;city (& # 39;我们# 39;,,(40.808611,-74.020386)) INFO 安康;city →, (& # 39; br # 39;,, (-23.547778, -46.635833))