类scala单字节数据类型的python实现。
functional-python的Python项目详细描述
函数式python-类似scala的一元数据类型
functional python是一个实现类似scala的一元数据类型的框架, 例如Option或Map。
为什么?
方法链
# ToDo: Example
类型安全性
# ToDo: Example
API说明
选项
表示可选值。 option的实例可以是some的实例,也可以是none对象。 选项是单一类型参数的泛型。
创建选项
fromfunctional.optionimport*# Scala-like constructorx=Some(4)# Some(4)y=Option.empty# Nonez=none# None# Python-like constructorx=Option(4)# Some(4)y=Option(None)# None
注意,打印的None
不是python None
但是是不包含任何值且等于Option(None)
的特殊对象。
获取选项的值
选项实现.get
属性和.getOrElse(default)
方法。
第一个检查选项不为空,返回值或引发异常。
第二个返回default而不是抛出异常。
fromfunctional.optionimport*x=Some(4)# Some(4)y=none# Nonex.get# 4y.get# raises EmptyOptionx.get_or_else(5)# 4y.get_or_else(5)# 5# .is_defined returns True if Option is not Nonex.is_defined# Truey.is_defined# False# .is_empty is the oppositex.is_empty# Falsey.is_empty# True# .non_empty is the same as .is_definedx.non_empty# Truey.non_empty# False
注意,与scala不同,这个选项的.get_or_else
不是惰性计算的,
因此此代码将失败:
Some(4).get_or_else(1/0)
为了防止,建议使用类似python的访问器(见下文)。
映射选项
选项既是函子又是单子,这意味着它们拥有.map()
和.flat_map()
方法。
具有以下签名(其中对象是类型Option[A]
):
.map(f: A => B): Option[B]
-映射选项内的值。.flat_map(f: A => Option[B]): Option[B]
-将选项内的值映射到选项。
这两个方法都只对非空选项起作用,否则返回Option.empty
。
fromfunctional.optionimport*x=Some(4)# Some(4)y=none# Nonez=Some(6)# Some(6)x.map(lambdav:v+2)# Some(6)y.map(lambdav:v+2)# Nonez.map(lambdav:v+2)# Some(8)x.flat_map(lambdav:Some(v)ifv<5elsenone)# Some(4)y.flat_map(lambdav:Some(v)ifv<5elsenone)# Nonez.flat_map(lambdav:Some(v)ifv<5elsenone)# None
展平选项
有时你会得到一个包含选项的选项。
有一个特殊的属性.flatten
,它将Option[Option[T]]
转换为Option[T]
# ToDo: Example
python风格的访问器
选项支持类似python的访问器/转换器__bool__
、__iter__
、__len__
和__enter__/__exit
。
# ToDo: Example
地图
todo
计划
- 测试覆盖率
- 支持映射(可变和不可变)
- 支持列表(可变和不可变)