python - 使用 Python 3.8 赋值表达式作为 let 表达式?
问题描述
我的预期行为是:
>>> x = 0
>>> with (x := 1): print(x)
1
>>> print(x)
0
但是我得到了预期的AttributeError: __enter__
错误。有没有一种简单的方法可以实现这一点,或者类似的方法可以让我弥补没有 Lisp 风格的 let 表达式?
PS我知道我可以做类似的事情:
class Let(object):
def __init__(self, **kwargs):
self.__dict__.update(kwargs)
def __enter__(self):
return self
def __exit__(self, *args):
return None
接着:
>>> with Let(x=1) as let: print(let.x)
或者:
>>> with (let := Let(x=1)): print(let.x)
但不得不说let.x
,而不是只是x
让它太丑陋了!
解决方案
使用您现有的 Let 类,您可以使用 __str__
(根据此答案)更改该类的字符串表示形式。然后只需调用您的实例 'x' 和 print(x) 就可以了
推荐阅读
- c# - EF 无法识别新属性
- android - 寻找 emoji 库或 SDK for android 在键盘中使用它
- angular - 为什么不在 Angular 中直接与 DOM 交互?
- kubernetes - kubernetes 在 pod 中使用具有 root 用户的 nfs 持久卷
- docker - 是否可以在容器内获得指定的 docker ram 限制?
- python - tensorflow - tf.data.Dataset 在批处理之前随机跳过样本以获得不同的批次
- confluence - 使用变量并在内容中显示
- java - 带有背景加载的imageview中的Javafx中心图像
- javascript - 如何在网站上的 github 上获取最新提交
- azure - 推荐实践如何在 Azure Function local.settings.json 文件中包含更复杂的配置 JSON 数据?