Is an interactive command a block?
steve at REMOVE-THIS-cybersource.com.au
Thu Nov 19 22:08:15 CET 2009
On Thu, 19 Nov 2009 21:37:17 +0100, Alf P. Steinbach wrote:
> The CPython 3.1.1 language reference §4.1 says
> "Each command typed interactively is a block."
> It also says
> "If a name is bound in a block, it is a local variable of that block,
> declared as nonlocal"
> Even with a non-literal try-for-best-meaning reading I can't get this to
> mesh with the actual behavior of the interpreter, e.g.
> >>> for x in "poi":
> ... fandango = 666
> >>> fandango
> >>> _
> My current understanding is (A) that the interpreter is correct in this
> respect (for one would harldly want the effects of statements to be
> fundamentally different in interpreted mode, except the presentation of
> expression results), and (B), but here I'm less sure, that the
> documentation is incorrect.
Why do you say that? I don't see what it is in the command you typed that
leads you to think the documentation is incorrect.
The first command you type is:
for x in "poi":
fandango = 666
which binds two names, x and fandango. Since you are not typing them in a
function or class definition, locals() is globals() and the two local
names you create happen to also be globals.
The next two commands you type:
don't bind anything, so aren't relevant.
If it helps:
>>> for x in "poi":
... fandango = 666
>>> locals() is globals()
>>> import __main__
More information about the Python-list