Not found in the documentation

elas tica elasstiika at gmail.com
Wed Apr 28 11:16:19 EDT 2021


Peter J. Holzer a écrit :

> That's why it's called a container. But it also says *what* an object 
> must contain to be called a container. You could say that an int object 
> contains an integer value and a str object contains a reference to a 
> buffer containing the string - but those aren't references to other 
> objects, so int and str are not containers.

This is not how I interpret the wording : a string is a container for containing 
a reference to the characters the string holds. Depends on what you mean 
by "reference" and "contain". With the definition given, I cannot decide
if a string or a range object is a container or not. For instance, 
can we say that range(100) contains 42 ?

PLR document *states* that tuples, lists, sets are containers but doesn't 
mention if a string is a container or not. Nevertheless, str has a __contains__ 
method so if a string is not a container what is the logic ?





> > You said that LR is designed to be much more formally defined, and 
> > favors correctness and completeness. Good, so can you answer this 
> > question after reading the LR : what is a "token"? Did't find a 
> > definition.
> There is an indirect definition right at the start of chapter 3: "Input 
> to the parser is a stream of tokens, generated by the lexical analyzer." 
> So a token is what the unit of output of the lexer. This is the 
> definition. The rest of the chapter defines the details.

As you know, the devil is in the details ;)


A bunch of properties doesn't make a definition.  What do we need is 
a characteristic property (necessary and sufficient).



> > Is the "is not" operator a token?
> Yes. See chapter 2.3.1. 
> 

2.3.1 is about keywords : https://docs.python.org/3/reference/lexical_analysis.html#keywords
not tokens (keywords are tokens but this is not the problem here).

>From 2.1.5 (Python 3.9 LR)

...............
A line ending in a backslash cannot carry a comment. A backslash does not continue a comment. A backslash does
not continue a token except for string literals (i.e., tokens other than string literals cannot be split across physical lines
using a backslash). A backslash is illegal elsewhere on a line outside a string literal.
...............

Giving the above, if "is not" were a token as you are explaining, the following code should be invalid syntax :

# ------------ begin code -------------

42 is\
 not [42]

# ------------ end code -------------

but this code compiles perfectly (there is a whitespace at the beginning of the second physical line).





More information about the Python-list mailing list