From 7710f1f00c253ee0b35fc6ae5783e958273e0e49 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Wed, 26 Jun 1996 19:26:40 +0000 Subject: explain global better --- Doc/ref/ref6.tex | 17 +++++++++++++++-- Doc/ref6.tex | 17 +++++++++++++++-- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/Doc/ref/ref6.tex b/Doc/ref/ref6.tex index 22575c2..54bfde5 100644 --- a/Doc/ref/ref6.tex +++ b/Doc/ref/ref6.tex @@ -481,14 +481,14 @@ global_stmt: "global" identifier ("," identifier)* \end{verbatim} The \verb@global@ statement is a declaration which holds for the -entire current scope. It means that the listed identifiers are to be +entire current code block. It means that the listed identifiers are to be interpreted as globals. While {\em using} global names is automatic if they are not defined in the local scope, {\em assigning} to global names would be impossible without \verb@global@. \indexiii{global}{name}{binding} Names listed in a \verb@global@ statement must not be used in the same -scope before that \verb@global@ statement is executed. +code block before that \verb@global@ statement is executed. Names listed in a \verb@global@ statement must not be defined as formal parameters or in a \verb@for@ loop control target, \verb@class@ @@ -499,6 +499,19 @@ restrictions, but programs should not abuse this freedom, as future implementations may enforce them or silently change the meaning of the program.) +Note: the \verb@global@ is a directive to the parser. Therefore, it +applies only to code parsed at the same time as the \verb@global@ +statement. In particular, a \verb@global@ statement contained in an +\verb@exec@ statement does not affect the code block {\em containing} +the \verb@exec@ statement, and code contained in an \verb@exec@ +statement is unaffected by \verb@global@ statements in the code +containing the \verb@exec@ statement. The same applies to the +\verb@eval()@, \verb@execfie()@ and \verb@compile()@ functions. +\stindex{exec} +\ttindex{eval} +\ttindex{execfile} +\ttindex{compile} + \section{The {\tt access} statement} \label{access} \stindex{access} diff --git a/Doc/ref6.tex b/Doc/ref6.tex index 22575c2..54bfde5 100644 --- a/Doc/ref6.tex +++ b/Doc/ref6.tex @@ -481,14 +481,14 @@ global_stmt: "global" identifier ("," identifier)* \end{verbatim} The \verb@global@ statement is a declaration which holds for the -entire current scope. It means that the listed identifiers are to be +entire current code block. It means that the listed identifiers are to be interpreted as globals. While {\em using} global names is automatic if they are not defined in the local scope, {\em assigning} to global names would be impossible without \verb@global@. \indexiii{global}{name}{binding} Names listed in a \verb@global@ statement must not be used in the same -scope before that \verb@global@ statement is executed. +code block before that \verb@global@ statement is executed. Names listed in a \verb@global@ statement must not be defined as formal parameters or in a \verb@for@ loop control target, \verb@class@ @@ -499,6 +499,19 @@ restrictions, but programs should not abuse this freedom, as future implementations may enforce them or silently change the meaning of the program.) +Note: the \verb@global@ is a directive to the parser. Therefore, it +applies only to code parsed at the same time as the \verb@global@ +statement. In particular, a \verb@global@ statement contained in an +\verb@exec@ statement does not affect the code block {\em containing} +the \verb@exec@ statement, and code contained in an \verb@exec@ +statement is unaffected by \verb@global@ statements in the code +containing the \verb@exec@ statement. The same applies to the +\verb@eval()@, \verb@execfie()@ and \verb@compile()@ functions. +\stindex{exec} +\ttindex{eval} +\ttindex{execfile} +\ttindex{compile} + \section{The {\tt access} statement} \label{access} \stindex{access} -- cgit v0.12