
On 05/17/2013 02:49 AM, Steven D'Aprano wrote:
On 17/05/13 04:28, Ron Adam wrote:
I think the line continuation '\' character would also make a good explicit string literal concatenation character. It's already limited to only work across sequential lines as well.
Concatenating strings on the same line is a legitimate thing to do, because you can mix different quoting types. In my opinion, there's no really clean way to build string literals containing multiple types of quotation marks, but implicit concatenation works and is useful. Here's a contrived example:
s = "'Aren't you supposed to be " '"working"?' "', he asked with a wink."
And here's a non-contrived one (almost) verbatim from working code: pattern = '[^\uFF1B\u30FB\u3001' r'+:=.,\/\[\]\t\r\n]+' '[\#\uFF03]+' In Python 2 this had been: pattern = ur'[^\uFF1B\u30FB\u3001+:=.,\/\[\]\t\r\n]+[\#\uFF03]+' but was changed to first form above due to Python 3's removal of lexical evaluation of \u literals in raw strings (see http://bugs.python.org/issue14973). Obviously the concatenation could have been done with the + operator but I felt the given form was clearer than trying to visually get whether any particular "+" was inside or outside of a string. There are other more complex regex with more +'s and my preference is to adopt a particular form I can use for most/all such rather than to tweak forms based on a particular string's content. I am assuming this discussion is regarding a possible Python 4 feature -- adjacent string literal concatenation has been documented behavior of Python going back to at least version 1.4.0 (the earliest doc available on python.org): "2.4.1.1 String literal concatenation Multiple adjacent string literals (delimited by whitespace), possibly using different quoting conventions, are allowed, and their meaning is the same as their concatenation..." I also have been using adjacent string literal concatenation in the "help" parameters of argparse calls as standard practice for many years, albeit on separate lines.