python的函子库
pyfunctor的Python项目详细描述
pyfunctor是一个python函数库,它提供实现 惰性计算、管道运算符和块语法。
用法示例如下:
>>> from pyfunctor.functor import * >>> f = (Functor(range(10)) >> c_(map)(lambda x: x * 2) ... >> c_(filter)(lambda x: x < 7) ... >> c_(sorted).key(lambda x: -x)) >>> run(f) # lazy evaluation [6, 4, 2, 0]
“functor”类将值打包到上下文中。 管道运算符“>>;”由函数组成,但直到 “run”函数应用于“functor”实例。
此外,“functor”实例将与“with”语句一起工作。 完成WITH块后,只对实例求值一次。
>>> with Functor(range(10)) as box: ... @c_(map) ... def f(x): ... y = x % 3 ... z = x + y ... return x + y + z ... ... @c_(sorted, keyword='key') ... def g(x): ... return (x % 7, x % 3, x) >>> box.value [0, 14, 8, 16, 10, 18, 4, 12, 6, 20]
一般来说,函子是可以映射的东西,比如列表、maybes等等。 “functor”类实现identity functor以提供默认实现。 作为其他示例,提供了“listf”和“maybe”。
>>> from pyfunctor.list import * >>> run(ListF([1, 2, 3]) >> (lambda x: x + 1)) [2, 3, 4] >>> f = lift(lambda x, y: (x, y)) >>> run(f(ListF(range(3)), ListF('ab'))) [(0, 'a'), (0, 'b'), (1, 'a'), (1, 'b'), (2, 'a'), (2, 'b')]>>> from pyfunctor.maybe import * >>> @lift ... def func(x): ... if x > 0: return x * 2 ... else: raise Exception() >>> func(Just(1)).run() Just(2) >>> func(Just(0)).run() Nothing