Maybe模式的Python实现。
pymaybe的Python项目详细描述
Maybe模式的Python实现。在
安装
pip install pymaybe
入门
^{pr2}$文件
也许monad是一种编程模式,它允许以与非None值相同的方式处理None值。 这是通过将值包装到包装类来完成的,该值可能是也可能不是None。在
实现包括两个类:Maybe和Something。 Something表示一个值,Nothing表示一个None值。 还有一个方法maybe,它包装一个常规值并返回Something或Nothing实例。在
>>> maybe("I'm a value") "I'm a value" >>> maybe(None); None
Something和Nothing都实现了4个方法,允许您测试它们的实际值:是_some,get,和{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'
此外,Something和Nothing实现了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的第一个版本。在
- 项目
标签: