Python实现Maybe模式。
项目描述
Python实现Maybe模式。
安装
pip install pymaybe
入门指南
from pymaybe import maybe first_name = maybe(deep_hash)['account']['user_profile']['first_name'].or_else("<unknown>")
文档
Maybe monad是一种编程模式,允许将None值与非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个方法,允许您测试它们的实际值:is_some、is_none、get 和 or_else
>>> 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'
示例和用例
The Maybe pattern helps you avoid nasty try..except blocks. Consider the following code
- ::
- try
url = rss.load_feeds()[0].url.domain
- except (TypeError, IndexError, KeyError, AttributeError)
url = “planetpython.org”
With Maybe you could simply do
url = maybe(rss).load_feeds()[0]['url'].domain.or_else("planetpython.org")
获取当前登录用户的名字。没有 maybe
def get_user_zipcode(): address = getattr(request.user, 'address', None) if address: return getattr(address, 'zipcode', '') return ''
使用 maybe
def get_user_zipcode(): return maybe(request.user).address.zipcode.or_else('')
进一步阅读
版权和许可证
版权 2015 - Eran Kampf
免费软件:BSD许可证
代码托管在 GitHub
历史
0.1.0 (2015-01-11)
首次发布于PyPI。
项目详情
下载文件
下载适用于您平台文件的文件。如果您不确定该选择哪个,请了解有关安装包的更多信息。
源分布
pymaybe-0.1.6.tar.gz (16.7 kB 查看哈希值)
构建分布
pymaybe-0.1.6-py2.py3-none-any.whl (7.8 kB 查看哈希值)
关闭
pymaybe-0.1.6.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 77ed1602e1b9e8b05dccd0d84891ede4ee2004728170e52af7f9c08d4c62378c |
|
MD5 | 30c7a1af361f327abb0e58191072ae01 |
|
BLAKE2b-256 | fe860bbefee601f7f5ce5fdd11ee59cbae36ce9cb48b96c44f960f38cbfe6d0a |
关闭
pymaybe-0.1.6-py2.py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 01d0f71b98e1c155ecfecd9db44ce49f37ae374b5cb8f1d27c0ee00c3d7aa4dd |
|
MD5 | 5e37221b3280109ea436700a996ec747 |
|
BLAKE2b-256 | 83f83bd91975bfbed25e453589d079cbf4f8f0b44a9cf6a82bfebbd69506b060 |