我的预期行为是:
>>> 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
让它太丑陋了!