4

コードゴルフをしているときに、奇妙な問題に遭遇しました

>>> print '%'+'-+'[1]+str(5)+'s'%'*'

Traceback (most recent call last):
  File "<pyshell#178>", line 1, in <module>
    print '%'+'-+'[1]+str(5)+'s'%'*'
TypeError: not all arguments converted during string formatting

私の仮定では、演算子の評価は左から右に行われますが、この特定のケースでは、その文字列操作% が優先+され、連結の前に評価しようとして's'%'*'失敗するようです

これは既知の文書化された動作ですか、それとも私には明らかではない何かがあります。

4

1 に答える 1

4

はい、ここに文書化されています。

優先順位は、操作対象のオブジェクトに関係なく、言語全体で一貫しています。「演算子」の特別なメソッド ( for など) を使用してオブジェクトを任意の動作で構築できるため、それ以外のものはひどく混乱し%ます__mod__()。オブジェクトが独自の優先順位規則を定義することも可能である場合、予期しない結果のデバッグははるかに困難になります。

于 2013-08-24T17:45:10.850 に答える