文字列リテラルは連続させられる
これは知らなかった。
文字列リテラルは連続させると一つにつながる。
例えば、
>>> print ('foo' ... 'bar' ... 'baz') foobarbaz
↑このようになる。
(括弧はリテラル3個をひとまとめの評価にする為で、カンマで区切ってタプルにしてはいけない)
三連クォートの文字列だと途中に存在する改行文字は有効だが、
この場合は無視される(当たり前だが)。
>>> print '''foo ... bar ... baz''' foo bar baz
文字列リテラル単純連続を使うメリットは正規表現を読みやすく書くときだ。
Perl, Rubyで正規表現リテラルを改行文字まじりで読みやすく記述することは可能だが、Pythonでも同じことができる。
これに気がついたのはdjango.forms.fieldsのemail_reを使おうとしたとき。
[django.forms.fields] 420 email_re = re.compile( 421 r"(^[-!#$%&'*+/=?^_`{}|~0-9A-Z]+(\.[-!#$%&'*+/=?^_`{}|~0-9A-Z]+)*" # dot-atom 422 r'|^"([\001-\010\013\014\016-\037!#-\[\]-\177]|\\[\001-011\013\014\016-\177])*"' # quoted-string 423 r')@(?:[A-Z0-9]+(?:-*[A-Z0-9]+)*\.)+[A-Z]{2,6}$', re.IGNORECASE) # domain
勉強になった。