Yes. Per-import-statement opt-in laziness is (basically) syntactic sugar for manually inlining imports.
The main reasons to look beyond manual inlining as a solution, off the top of my head, are:
-
Manual inlining invokes the import system every time the function is called, which has a noticeable cost. The PEP 690 approach reduces this overhead to zero, after the initial reference that triggers the import.
-
Manual inlining is verbose. Sometimes syntactic sugar tastes sweet
-
Manual inlining doesn’t put the name in module scope, which means e.g. it can’t be re-exported, and it can’t be used for module-level uses like type annotations (which has a lot of value when the annotations themselves are lazy via PEP 563 or 649.)