提供一个may类,作为一个支持空的操作符的python实现。

maybe-else的Python项目详细描述


概述

提供一个Maybe类,该类在python中充当空感知运算符的伪实现:

  • 可用于避免常见的var if var is not None else handle_none(var)结构
  • 空感知项访问
  • 空感知属性访问
  • 支持空的链式方法调用
  • 可与大多数运算符组合使用

安装

要安装,请使用pip:

$ pip install maybe-else

或者克隆回购协议:

$ git clone https://github.com/matthewgdv/maybe.git
$ python setup.py install

用法

最简单的用例是将值包装在Maybe类中,并用一个替代值调用Maybe.else_()。如果初始值是None, 将返回替代值。否则将返回原始值。

Maybe(None).else_("other")                      # "other"
Maybe("hi").else_("other")                      # "hi"

更复杂的用法包括链接项/属性访问和方法调用初始值。 如果在任何时候引发IndexError(项访问)、AttributeError(属性访问)或TypeError(方法调用),则在调用Maybe.else_().时将返回替代值。 其他异常类不被Maybe(有意)捕获,必须正常处理。

Maybe("hi").monkeyweasel[3].else_("other")      # "other"
Maybe({1: "1"})[1].isnumeric().else_("other")   # True

大多数运算符可以与Maybe一起使用。涉及运算符的操作将忽略TypeError,但必须在Maybe构造之外处理其他类型的异常。

(Maybe(8) / 2).else_("other")                   # 4.0
(Maybe("hi").upper() + "!").else_("other")      # "HI!"
(Maybe(None) // 3).else_("other")               # "other"
(Maybe(11) % 4).else_("other")                  # 3

如果对Maybe对象执行的操作将不返回任何值,则Maybe.else_()将不返回任何值,而不是替代值。 这是因为None是合法的输出值,只要它不是原始输入值。

Maybe({1: "1"}).get(2).else_("other")           # None

只要Maybe类返回它当前在调用Maybe.else_()时持有的内容,它就会是truthy,而当它返回替代项时,它就会是falsy。

贡献

我们欢迎您的贡献,我们非常感谢您的贡献!一点一滴的帮助,总是会有功劳的。

您可以通过多种方式做出贡献:

报告错误

https://github.com/matthewgdv/maybe/issues

如果您报告了一个错误,请包括:

  • 您的操作系统名称和版本。
  • 有关本地设置的任何有助于故障排除的详细信息。
  • 重现错误的详细步骤。

修复错误

查看github问题中的bug。任何带有“bug”和“help wanted”标签的东西都对任何想要实现修复的人开放。

实现功能

查看github问题以了解特性。任何标有“增强”和“需要帮助”的东西都对任何想要实现它的人开放。

编写文档

存储库总是可以使用更多的文档,无论是作为官方文档的一部分,在docstring中,还是在web上的博客文章、文章等。

提交反馈

发送反馈的最佳方式是在https://github.com/matthewgdv/maybe/issues提交问题。

如果您提出新功能:

  • 详细解释它的工作原理。
  • 尽量缩小范围,以便于实施。
  • 请记住,这是一个志愿者驱动的项目,欢迎您的贡献:)

开始吧!

在提交请求之前,请检查它是否符合以下准则:

  1. 如果pull请求添加了功能,那么它应该包括测试,并且应该更新文档。为属于外部api的任何函数编写docstring,并添加 readme.md的功能。

  2. 如果pull请求修复了一个bug,则应添加测试以证明该bug已被修复。但是,对于错误修复,不需要更新文档。

  3. pull请求应该适用于最新版本的python(当前为3.7)。旧版本可能附带工作,但不受官方支持。

  4. 应该使用内联类型提示,重点是确保像jedi这样的内省和自动完成工具能够在可能的情况下竖立代码。

  5. 在可能的情况下,应遵循PEP8指南,但鼓励偏离其合理之处并提高可读性。以下PEP8错误代码可以是 安全忽略:E121、E123、E126、E226、E24、E704、W503

  6. 此存储库故意不允许PEP8 79字符的限制。因此,任何遵守本公约的捐款都将被拒绝。根据经验,你应该 尽量保持在200个字符以下,除非遍历保留对齐,或者行主要是非算法代码,例如非常长的字符串或函数 电话。

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

推荐PyPI第三方库


热门话题
java CXF和授权   java在网站中部署使用swing创建的表单   java为什么getHeaderField()返回一个字符串,其中getHeaderFields()返回HttpUrlConnection中的Map<String,List<String>>   java如何检测恶意数据包?   webview中的java网页为空   java SWT图像资源,用于将我的所有图像存储在一个位置   java计算数组的最大长度,使平均值小于给定值   java“发件人电话号码无效”和美国号码   将Swing组件作为内容的自定义Java工具提示不会显示   在并发HashMap中重新灰化期间的java检索   Java 7和Tomcat 7.0.64 ClassFormatException:常量池中的字节标记无效   使用JUnit的java assertNull因NullPointerException失败   java内存中的文件是否与文件系统中的文件大小相同?   循环内实例化的类型的java注入依赖项