首页 > 解决方案 > 使用 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让它太丑陋了!

标签: pythonpython-3.8python-assignment-expression

解决方案


使用您现有的 Let 类,您可以使用 __str__ (根据此答案)更改该类的字符串表示形式。然后只需调用您的实例 'x' 和 print(x) 就可以了


推荐阅读