dry-python / dry-python/returns

Adding some utility methods to Maybe/Result

未关闭
#1,114 20 条评论 7 个 reaction 已指派 0 人 在 GitHub 查看
enhancement
主要语言
Python
星标
4.4k
派生
155
平均合并
2 小时 27 分钟
30 天内合并 PR
22

描述

Have you considered adding some handy utility functions to `Maybe` and `Result`?
In using `returns` I'm missing many helpful methods you can find in Rust, for example.
Adding a few of these could increase the usability of the containers of `returns`.

Related: #1091

Here they are, in my subjective order of usefulness:

## Setdefault

Set a value if one is not yet present.
The name `setdefault` would be consistent with the python dict method.
(Although it might be good to choose another name to make clear that
the method doesn't mutate.)

```python
>>> Some(6).setdefault(7)
Some(6)
>>> Nothing.setdefault(3)
Some(3)
```

## Zip

Combine the values from two containers into a tuple, if both are successful.

```python
>>> Some(8).zip(Some(2))
Some((8, 2))
>>> Some(7).zip(Nothing)
Nothing
>>> Nothing.zip(Some(3))
Nothing
>>> Nothing.zip(Nothing)
Nothing
```

## Filter

Keep a value based on a predicate

```python
>>> Some("9").filter(str.isdigit)
Some("9")
>>> Some("foo3").filter(str.isdigit)
Nothing
>>> Nothing.filter(str.isdigit)
Nothing
```

## And

`AND` logic operation

```python
>>> Some(5).and_(Some(9))
Some(9)
>>> Some(9).and_(Nothing)
Nothing
>>> Nothing.and_(Some(8))
Nothing
```

## Or

`OR` logic operation

```python
>>> Some(5).or_(Some(9))
Some(5)
>>> Some(9).or_(Nothing)
Some(9)
>>> Nothing.or_(Some(8))
Some(8)
>>> Nothing.or_(Nothing)
Nothing
```

贡献指南

打开贡献指南

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。