2015-02-01 9 views
5

Ich verwende PyCharm und ich habe diese Aussage:Gibt es einen besseren Weg, um a = b + a zu machen?

a = 'foo' 
b = 'bar' 
a = b + a 

und PyCharm unterstreicht die letzte Zeile sagen, dass:

Assignment can be replaced with augmented assignment

Zuerst dachte ich, es so etwas wie das sein könnte, aber mit Fehler endete :

a += b # 'foobar' 
a =+ b # TypeError: bad operand type for unary +: 'str' 

Aber 'foobar' ist nicht was ich will; 'barfoo' ist.

Also, was ist diese erweiterte Zuordnung? Gibt es einen geeigneteren Weg dies zu tun oder sollte ich PyCharms Warnung ignorieren?

+3

Viele Additionsoperationen sind kommutativ ('1 + 2 == 2 + 1'), aber das gilt eindeutig nicht für Strings. Da Python dynamisch typisiert wird, kann PyCharm nicht sagen, welches das ist. – jonrsharpe

+0

@jonrsharpe: Ich glaube, dass PyCharm viel Arbeit unternimmt, um zu bestimmen, welche Arten zur Bearbeitungszeit durch statische Analyse ermittelt werden. Sie können sicherlich Hinweise geben, welche Art zu erwarten ist. Wenn man sagt, dass "a" und "b" Saiten sind, würde es diesen Ratschlag nicht geben. –

+1

@MartijnPieters Interessanterweise gibt es diese Warnung nicht innerhalb einer Funktion, so dass ich nicht testen kann, ob Typ-Hinting in Anmerkungen/Docstring einen Unterschied machen wird. Ich bin überrascht, dass es die zugewiesenen String-Literale nicht aufnimmt. – jonrsharpe

Antwort

13

Ignorieren Sie einfach PyCharm, es ist stumpf. Die Bemerkung trifft eindeutig nicht zu, wenn die Operanden nicht einfach getauscht werden können.

Der Hinweis arbeitet für numerische Operanden, weil a + b das gleiche Ergebnis wie b + a produziert, sondern für Streicher Zugabe ist nicht kommutativ und PyCharm sollte nur aus ihm heraus halten.

Wenn Sie wirklich die Meldung vermeiden möchten, können Sie String-Formatierung:

a = '{}{}'.format(b, a) 

aber ich würde nicht die Mühe, wirklich.

Verwandte Themen