"print" as function not statement
David MacQuigg
dmq at gain.com
Tue Mar 9 16:04:13 EST 2004
On Sun, 07 Mar 2004 16:57:29 -0800, Paul Prescod <paul at prescod.net>
wrote:
>This is just a trial balloon. It isn't even in proper PEP format yet.
>Don't take it too personally!
>
>Pre-pep for a show() built-in function.
>
> This pre-PEP describes a replacement for the Python print
> statement. Obviously the replacement of such a popular
> statement will take time and cause dislocation. It must
> therefore be done very gradually and carefully. Nevertheless,
> the print statement stands out in Python because of its
> quirky syntax and semantics. This PEP proposes to migrate
> the print statement towards standardized function syntax.
At this point, my initial reaction was "no way". After reading the
rest of the proposal, I say "yes". Your arguments are very
convincing.
>Problems with "print"
>
> New users are constantly asking how to print elements without
> trailing whitespace.
And the answer is easy, but not obvious to a beginner, and also
something beginners tend to resist, as if having once been spoiled on
a print statement without parens, it is now too much work to type
printX( ... )
This to me, is the most powerful argument.
> The use of a trailing comma to disable newline has no clear
> relation to any other syntax elsewhere in Python.
>
> The cheveron syntax is similarly unique.
Both good points.
> "print" is the one of only two statement-generating keywords
> that is not a flow-control or scope-control operator.
Don't care. I have never thought about the underlying 'nature' of
these statements, and I wouldn't fault a language for this.
> Because print is a statement, it cannot be used in contexts
> like list comprehensions and lambda functions.
I've hit this snag.
> The word "print" is very common in English usage and would be
> very useful for method and function names. It is a (very)
> long-term goal of this PEP to free it up for this purpose.
Perhaps we could retain the deprecated form in a module to be accessed
with
from __the_past__ import print :>)
[ snip ]
>Proposed solution: "show"
>
> I propose a new built-in function called "show". It can take an
> arbitrary number of positional arguments and three optional
> keyword arguments:
>
> * separator - string to use to separate the string
> displays of the objects that are written. Defaults
> to a single space.
>
> * trailer - string that follows the string displays
> of the objects that are written. Defaults to a
> single newline.
>
> * to - a file object to write the strings to. Defaults
> to sys.stdout.
>
> Some examples:
>
> show(5)
>
> show(5, to = sys.stderr)
>
> show(5, 6, separator = ",")
>
> show(5, 6, trailer = "\n\n")
>
> show("Five", 5, "Six", 6)
>
> show(show)
This is clearly the right way to re-write an old function, extending
the options, but preserving the old behavior as a default. I would
like to do the same with some of the convenience functions in the
os.path module (exists, isfile, isdir). Convenience is fine, but
don't hide the primitives.
>Possible Extensions
>
> Debug-useful return value
>
[ snip ]
> x = show(j[x]).y(a[x])
This would be very handy.
Go for it !!
-- Dave
More information about the Python-list
mailing list