[Python-ideas] Null coalescing operators
bussonniermatthias at gmail.com
Tue Sep 22 02:34:43 CEST 2015
On Mon, Sep 21, 2015 at 2:48 PM, Guido van Rossum <guido at python.org> wrote:
> In general to avoid this repetition you have to introduce a local variable,
> but that's often awkward and interrupts the programmer's "flow". The ?
> solves that nicely. The key issue with this proposal to me is how it affects
> readability of code that uses it, given that there isn't much uniformity
> across languages in what ? means -- it could be part of a method name
> indicating a Boolean return value (Ruby) or a conditional operator (C and
> most of its descendents) or some kind of shortcut.
> So this is the issue I have to deal with (and thought I had dealt with by
> prematurely rejecting the PEP, but I've had a change of heart and am now
> waiting for the PEP to be finished).
As we are in the process of writing a PEP and uses of ?/?? in other languages,
why not speak about thecurrent usage of `?` / `??` in the Python community ?
(I'll try to state only facts, excuse any passage that might seem like
a personal opinion)
Can the PEP include the fact that `? and `??` have been in use in the Scientific
Python community for 10 to 14 years now, and that any Scientific Python user who
have touched IPython will tell you that ? and ?? are for getting help.
(?? try to pull the source, while ? does not, but let's not get into details).
This include the fact that any IDE (like spyder) which use IPython under
the hood have this feature.
The usage of `?` is even visible on Python.org main page  (imgur screenshot),
which invite the user to launch an interactive console saying:
> object? -> Details about 'object', use 'object??' for extra details.
> In :
leading the casual user thinking that this is a Python feature.
This fact is even including in Books and introduction to python. Sometime
without mentioning that the feature is IPython Specific, and does not work in
Examples in Cyrile's rossant "Learning IPython for Interactive
Computing and Data Visualization"
introduce Python with the second code/repl example beeing about `?`.
Book extract :
> Some of these commands let you get some help or information about any
> Python function or object. For instance, have you ever had a doubt about how
> to use the super function to access parent methods in a derived class? Just type
> `super?` and you’ll find out. Appending `?` to any command or variable gives you all
> the information you need about it.
> In : super?
> Type: type
> String Form:<type 'super'>
> Namespace: Python builtin
A google search also give for eaxample:
Python for beginners online tutorial which does rapidly the same:
> The "?" is very useful. If you type in `?` after a `len?`, you will see the
> documentation about the function len.
> Typing `?` after a name will give you information about the object attached to that name.
Doing even worse as they replace the IPython prompt `In[x]:` with
`>>>` literally showing
that `>>> len?` works. Which imply that it should work on a plain Python REPL.
As someone that have to regularly teach Python, and interact with new
it will be hard to explain that `?` and `??` have different meaning
depending on the context,
and that most book on Scientific Python are wrong/inaccurate.
>From the current state of the PEP/proposal I'm guessing we should be
able to distinguish
Null Coalescing operation (or whatever name you want to give them) in
from actual help request, and that this will allow us to keep backward
with 10+ years of code/user habits, but the result will most likely be
It will be even harder if we have to remove the usage of `?`/`??`.
I also want to note that the use of `?`/`??` is not present to just being or end
of identifiers as it can also be used use to search for names:
> In : *int*?
But this usage is not as widespread as extracting help about objects,
and seem less relevant, though I'm not sure:
> In : ?Float*Error
> In : Uni*Error?
Please take these fact into consideration when making a
decision/writing the Pep.
: That's one of the only book for which I have (legally) the
sources, and that I bother to grepped through.
: I'll have to hire a body guard to prevent people to pursue me to
the end of the earth with a chainsaw. I'm sure you know that feeling.
More information about the Python-ideas