有些电池Python没有管道操作符、d语言风格范围等等
coppertop的Python项目详细描述
铜头
coppertop包有两个关键特性,一个管道操作器(带过载)和D 语言风格范围。我发现这些对于以管道样式编写代码非常有用(例如。 功能性方式)。在
了解 codebase是启动你最喜欢的调试器(例如PyCharm)并直接进入 以下内容:
pipeable
{coppertin测试概述_管道.py在
范围
coppertop/示例/count_行_jsp.py文件和coppertop/examples/tests/test_count_行_jsp.py文件 解决https://en.wikipedia.org/wiki/Jackson_structured_programming中描述的jsp问题
在coppertop/示例/格式_日历.py和coppertop/examples/tests/test_格式_日历.py 解决https://wiki.dlang.org/Component_programming_with_ranges中描述的日历打印问题
在
管道
Pipeable修饰符使用“>>和”<;<;运算符扩展函数,效果如下 添加类似管道的行为(例如,类似于F中的|>;)。在
x>;f和f>;x都回答f(x)
x<;<;f调用f(x)并回答x
f<;<;x调用f(x)并回答f
或相当于,
lhs>;>rhs答案f(x)
lhs<;<;rhs调用f(x)并回答lhs
示例:
from coppertop import Pipeable
@Pipeable
def Each(xs, f):
return [f(x) for x in xs]
@Pipeable
def Chain(seed, xs, f):
prior = seed
for x in xs:
prior = f(prior, x)
return prior
@Pipeable
def SquareIt(x):
return x * x
@Pipeable
def Add(x, y):
return x + y
actual = [1,2,3] >> Each >> SquareIt >> Chain(seed=0) >> Add
expected = 14
assert actual == expected
另外,使用可管道修饰的函数可以很容易地
例如,通过提供一些论据而变得片面
Chain(seed=0)
在上面的代码中。参数序列是kdb样式
而不是F#style,即,>;>不会更改()的优先级。在
过载
Pipeable修饰符还允许按类型重载函数。在
^{pr2}$范围
使用D样式范围类似于使用非反应式编程 拉式DAG。调试一个明显简单的序列,比如
def test_checkNumberOfDaysInEachMonth():
2020 >> DatesInYear \
>> MonthChunks \
>> Materialise >> Each >> Len \
>> AssertEqual >> [31,29,31,30,31,30,31,31,30,31,30,31]
类似于DAG调试,因为您需要在许多地方有断点 代码很难理解。在
然而,D中的范围实现有一个关键的补偿特性。在
输入和输出类型不像在典型的DAG实现中那样是固定的 所以每个范围都更容易单独测试和推理。因此他们可以 在较长的管道中更容易组装,并且具有更高的可信度。在
次要特征
在铜版时间-不允许观察的时间类型 要抽象的上下文(即通常的tz或location)。在
- 项目
标签: