类scala单字节数据类型的python实现。

functional-python的Python项目详细描述


函数式python-类似scala的一元数据类型

functional python是一个实现类似scala的一元数据类型的框架, 例如OptionMap

为什么?

方法链
# 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

计划

  • 测试覆盖率
  • 支持映射(可变和不可变)
  • 支持列表(可变和不可变)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
junit有没有办法在Java中重新初始化静态类?   在浏览器中点击应用程序时java Play框架挂起   文件Java错误中的NullPointerException   使用Java中的SNMP查找网络中计算机的登录名   java包装服务器引导程序已弃用,有什么替代方案?   当客户在等待理发时,java信号量值是否存在问题?   java如何使用JavaMail仅下载特定类型的附件   如何在java中将十进制转换为十六进制   java Slick2D粒子系统不会生成粒子   java检测更改事件来自何处   将Java集合类型参数类设置为数组   java如何从eclipse导出为可运行JAR文件?   java EntityManager对象未注入Glassfish和Spring   swing从actionPerformed和actionListener Java返回字符串   java在给定另一个等价键对象的情况下获取映射项的当前键   无论输入如何,java网络都会产生相同的输出