如何在Python中使用算子模块

  介绍

如何在Python中使用算子模块?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

1计算函数

假设我们需要一个计算阶乘的函数,一般做法是使用递归。如果使用函数式编程,可以有两种方式,一种λ,另一种使用算子模块中的算术函数。我们做个比较。

首先使用λ方式来实现:

得到functools  import 减少   def 事实(n):   return 才能减少(lambda  a, b:, a  *, b,,范围(1,n  +, 1))

这里用到了减少方法,减少()函数语法:<代码>减少(函数,iterable(初始化))>

减少()函数中的功能使用λ表达式。第二个入参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

操作符模块内部还定义了很多类似的计算函数,比如:

如何在Python中使用算子模块“> </p> <h3> 2过滤函数<br/> </h3> <p>操作符模块中还有一类函数能够起到条件过滤的作用。</p> <p>首先介绍itemgetter函数。假设定义了一个f函数,f=itemgetter(2),那么如果调用f (r),实际会返回r[2]。也就是说,传入的入参r,最终返回的只是r的索引值为2(从1开始计算)那一部分。</p> <p> itemgetter函数应用场景是:根据元组的某个字段对元组列表进行排序。比如我们有一段JSON格式的城市数据,需要对其简称进行排序:</p> <pre类=得到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))

如何在Python中使用算子模块