I think you probably mean something other than what you actually write. It doesn't really make sense for "any expression" as far as I can tell. What would it possibly mean to write:
with (2+2) as foo:print(foo)
>>> @contextmanager... def bind(val):... yield val...>>> with bind(2+2) as four:... print(four)...4