On 7/21/2020 4:59 PM, Rob Cliffe via Python-ideas wrote:
On 21/07/2020 19:54, Alex Hall wrote:
It should do the import for you. As was proposed:
``` print(f"My dict: {d!p}") ```
should be equivalent to
``` import pprint print(f"My dict: {pprint.pformat(d)}") You're right, I didn't read it carefully enough. ```
The import should happen in the same scope. Modifying the global namespace could be confusing. You're right again. It could still break code like this:
from pprint import pprint ... def myfunc(): # Code modified to use !p here pprint(something) # Oops, pprint is now a module, not a function
unless the import could actually be local to the f-string itself, not the surrounding scope (perhaps similar to the way a list comprehension is implemented as a function with its own scope).
I don't totally understand these matters, so I may have got something wrong.
You don't need to go through globals, locals, etc. You can do the equivalent of:
import pprint import sys pprint = 3 sys.modules['pprint'].pprint('hello') 'hello'
Except that "sys" wouldn't be a local/global, either. But of course you could still monkeypatch pprint and break this code. There are a million ways to break code, I wouldn't worry about how the interpreter would get access to the pprint module. Instead, I'd worry about the more troubling issues which I raised in an earlier email. Those are the ones that are likely to stop this proposal. Eric