python 其他常用高阶模块方法

functools.partial(func, /, *args, **keywords)

偏函数, 返回新的部分对象(函数),类似于传入了默认参数一样

from functools import partial


def run(m, n):
    return m + n


run2 = partial(run, n=1)

print(run2(m=2))

functools.reduce(function, iterable[, initializer])

将两个参数的 function 从左至右积累地应用到 iterable 的条目,以便将该可迭代对象缩减为单一的值。就是累计迭代对象的值, 可以设置初始值

from functools import reduce

print(reduce(lambda x, y: x + y, range(10)))

functools.wraps(wrapped, assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES)

常用于装饰器的函数名称及注释等反转

from functools import wraps


def decorator(func):
    @wraps(func)
    def inner(*args, **kwargs):
        print("start")
        func(*args, **kwargs)
        print("end")

    return inner


@decorator
def test():
    print("test1")
    print("test2")


test()

operator:标准运算符替代函数

operator 模块提供了一套与Python的内置运算符对应的高效率函数

  • operator.contains(a, b)、operator.__contains__(a, b)
    返回 b in a 检测的结果。 请注意操作数是反序的。
  • operator.countOf(a, b)
    返回 b 在 a 中的出现次数。
  • operator.indexOf(a, b)¶
    返回 b 在 a 中首次出现所在的索引号。
  • operator.setitem(a, b, c)`operator.__setitem__(a, b, c)
    将 a 中索引号为 b 的值设为 c。
  • operator.attrgetter(attr)、operator.attrgetter(*attrs)
    返回一个可从操作数中获取 attr 的可调用对象。 如果请求了一个以上的属性,则返回一个属性元组。 属性名称还可包含点号。 批量获取对象的属性,例如:
    • 在 f = attrgetter('name') 之后,调用 f(b) 将返回 b.name。
    • 在 f = attrgetter('name', 'date') 之后,调用 f(b) 将返回 (b.name, b.date)。
    • 在 f = attrgetter('name.first', 'name.last') 之后,调用 f(b) 将返回 (b.name.first, b.name.last)。
  • operator.itemgetter(item)、operator.itemgetter(*items)
    返回一个使用操作数的 getitem() 方法从操作数中获取 item 的可调用对象。 如果指定了多个条目,则返回一个查找值的元组。可以取出对象中对应位置的元素 例如:
    • 在 f = itemgetter(2) 之后,调用 f(r) 将返回 r[2]。
    • 在 g = itemgetter(2, 5, 3) 之后,调用 g(r) 将返回 (r[2], r[5], r[3])。
      常用实例:
itemgetter(1)('ABCDEFG')
'B'
itemgetter(1, 3, 5)('ABCDEFG')
('B', 'D', 'F')
itemgetter(slice(2, None))('ABCDEFG')
'CDEFG'
soldier = dict(rank='captain', name='dotterbart')
itemgetter('rank')(soldier)
'captain'

使用 itemgetter() 从元组的记录中提取特定字段的例子:

inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)]
getcount = itemgetter(1)
list(map(getcount, inventory))
[3, 2, 5, 1]
sorted(inventory, key=getcount)
[('orange', 1), ('banana', 2), ('apple', 3), ('pear', 5)]

参考

官网operator介绍

posted @ 2022-08-02 15:42  形同陌路love  阅读(39)  评论(0编辑  收藏  举报