On 17/09/2017 15:42, Steve D'Aprano wrote:
On Sun, 17 Sep 2017 11:51 pm, Tim Golden wrote:

Print-as-a-function removed one small simplicity

Presumably you've never wanted to print to something other than std.out.

Actually, no. (stderror is either a Unix-ism or C-ism, or some combination).

 The
syntax in Python 2 is horrid:

print >>sys.stderr, args

But I have wanted to print to a file. I wasn't aware of Py2 syntax for it, but that's not so different to what I normally use which is "@" in place of "<<". And the @, which used to be #, I think came from '#' in Basic or somewhere.

I understand from your example below that in Py3, the file is specified somewhere in a list of keyword parameters.

But since the print destination is quite important, it benefits from being stated up-front rather than buried somewhere near the end of all the main print operands.

Presumably you've never wanted to print using a separator other than space. You
simply can't do it at all in Python 2.

Presumably you've never wanted to print and suppress the newline at the end of
the line.

With the languages I normally use, newline isn't automatically written in the first place! (I'd write either print or println.)

However controlling the separator between items has been and still is a nuisance (if not using a formatting string, but this is about being able to write quick, throwaway prints).

Py3's 'sep' parameter is usable, mainly by requesting no separator and adding them manually as required. So if (a,b,c,d,e) have the values ("(",10,20,30,")") and you wanted output of '(10 20 30)' I guess you would write:

 print (a,b," ",c," ",d,e, sep="")

(The scheme I currently use is to always add a space unless suppressed with ',,', so the same requirement is written as:

 println a,,b,c,d,,e

But they're /both/ ugly!)

Presumably you've never wanted to pass print to something as a function. It
can't be done in Python 2:

something.register(callback=print)  # SyntaxError

And again, no. It has happened, and this was not in Python, that I wanted to print to a string (appending to one), or to the current location in a window or image. Then, you need a clear way specifying such a destination.

Presumably you've never wanted to control when the output buffer is flushed.
That's another thing you can't do in Python 2.

Once more, no. I suppose it would be necessary to call a separate function, which is handier in not cluttering up the main print.

Presumably you've never wanted to monkey-patch an existing function that used
print by shadowing the built-in. You can't do that in Python 2, since print
isn't a regular name, it can't be mocked or shadowed or replaced.

Sorry, no.

I've wanted to do all those things, and more. I love the new print function. For
the cost of one extra character, the closing bracket, it gives you much, much
more than the old print statement ever did.

print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)

OK, in that case why not have both? Of course they would need to be given different names to make things easier.

Then there wouldn't be any argument.

No more cryptic and ugly syntax for printing to a file. Setting the argument
separator is easy. Instead of an obscure and easy to miss trick to suppress the
end of line, you use an obvious and self-explanatory keyword argument.

  movedata(a, b, action='copy', depth='shallow')

Self-explanatory keyword arguments, tick; as simple as just writing:

  a = b

probably not!


--
bartc
--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to