Maybe模式的Python实现。

pymaybe的Python项目详细描述


https://travis-ci.org/ekampf/pymaybe.svg?branch=masterhttps://coveralls.io/repos/ekampf/pymaybe/badge.svg?branch=master&service=githubhttps://img.shields.io/pypi/v/pymaybe.svg

Maybe模式的Python实现。在

安装

pip install pymaybe

入门

^{pr2}$

文件

也许monad是一种编程模式,它允许以与非None值相同的方式处理None值。 这是通过将值包装到包装类来完成的,该值可能是也可能不是None。在

实现包括两个类:MaybeSomethingSomething表示一个值,Nothing表示一个None值。 还有一个方法maybe,它包装一个常规值并返回SomethingNothing实例。在

>>> maybe("I'm a value")
"I'm a value"

>>> maybe(None);
None

SomethingNothing都实现了4个方法,允许您测试它们的实际值:是_someget,和{em1}$或其他

>>> maybe("I'm a value").is_some()
True

>>> maybe("I'm a value").is_none()
False

>>> maybe(None).is_some()
False

>>> maybe(None).is_none()
True

>>> maybe("I'm a value").get()
"I'm a value"

>>> maybe("I'm a value").or_else(lambda: "No value")
"I'm a value"

>>> maybe(None).get()
Traceback (most recent call last):
...
Exception: No such element

>>> maybe(None).or_else(lambda: "value")
'value'

>>> maybe(None).or_else("value")
'value'

此外,SomethingNothing实现了Python魔术方法,允许您将它们视为字典:

>>> nested_dict = maybe(nested_dict)
>>> nested_dict['store']['name']
'MyStore'
>>> nested_dict['store']['address']
None
>>> nested_dict['store']['address']['street'].or_else('No Address Specified')
'No Address Specified'

Something的所有其他方法调用都被转发到其实际的value

>>> maybe('VALUE').lower()
'value'

>>> maybe(None).invalid().method().or_else('unknwon')
'unknwon'

示例和用例

也许模式可以帮助你避免讨厌的尝试…除了方块。 考虑以下代码:

尝试:
网址=rss.load_源()[0]。网址.domain
除(TypeError、IndexError、KeyError、AttributeError):
网址=“planetpython.org“

或许你可以简单地做:

url = maybe(rss).load_feeds()[0]['url'].domain.or_else("planetpython.org")

正在获取当前登录的用户名。 没有可能:

def get_user_zipcode():
    address = getattr(request.user, 'address', None)
    if address:
        return getattr(address, 'zipcode', '')

    return ''

有可能:

def get_user_zipcode():
    return maybe(request.user).address.zipcode.or_else('')

历史

0.1.0(2015-01-11)

  • PyPI的第一个版本。在

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

推荐PyPI第三方库


热门话题
java如何将异步类的结果放入mainActivity EditText   java LDAP目录管理器服务提供,OutOfMemory   java Cassandra NoHostAvailableException,但仍存在活动节点   springboot应用程序的java启动线程   如果poll不一定返回第一项,那么java是ConcurrentLinkedQueue的好选择吗?   解析XML时JSON中出现java意外字符串   当'key'是两个整数时,如何输出Java HashMap键?   java为什么不显示在jsp页面中   java使用流式API转换映射列表中的值   JavaJPA+Spring:基于在持久化实体之前接收到的值,将外键列映射到ID   java如何使用selenium读取pdf文件   Canny之后的java对象提取   DSpace没有列出集合,java。lang.NumberFormatException:null   java我可以为数据库表主键设置一个最大值吗?   java如何定义Javadoc链接,可以通过单击   @java/spring中的SessionAttribute是否丢失数据?