2015-02-01 7 views
5

मैं PyCharm उपयोग कर रहा हूँ और मैं इस कथन है:एक = बी + ए करने के लिए कोई बेहतर तरीका है?

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

और PyCharm अंतिम पंक्ति कह रही है कि प्रकाश डाला गया:

Assignment can be replaced with augmented assignment

सबसे पहले मैंने सोचा था कि वहाँ कुछ इस तरह हो सकता है, लेकिन त्रुटि के साथ समाप्त हो गया :

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

लेकिन 'foobar' वह नहीं है जो मैं चाहता हूं; 'barfoo' है।

तो, यह संवर्धित असाइनमेंट क्या है? क्या ऐसा करने का कोई और सही तरीका है या क्या मुझे PyCharm की चेतावनी को अनदेखा करना चाहिए?

+3

कई अतिरिक्त संचालन कम्यूटिव ('1 + 2 == 2 + 1') हैं, लेकिन यह स्पष्ट रूप से तारों के साथ लागू नहीं होता है। चूंकि पाइथन गतिशील रूप से टाइप किया गया है, PyCharm यह नहीं बता सकता कि यह कौन सा है। – jonrsharpe

+0

@jonrsharpe: मेरा मानना ​​है कि PyCharm स्थिर विश्लेषण के माध्यम से संपादन समय पर प्रकारों को निर्धारित करने और निर्धारित करने के लिए बहुत सारे काम करता है। आप निश्चित रूप से संकेत दे सकते हैं कि किस प्रकार की अपेक्षा की जा सकती है। शायद अगर 'ए' और 'बी' तारों को बताया जाता है, तो यह सलाह नहीं देगी। –

+1

@MartijnPieters दिलचस्प रूप से, यह इस चेतावनी को किसी फ़ंक्शन के अंदर नहीं देता है, इसलिए मैं यह जांच नहीं कर सकता कि एनोटेशन/डॉकस्ट्रिंग में टाइप-इंकिंग एक अंतर करेगी। मुझे आश्चर्य है कि यह निर्दिष्ट स्ट्रिंग अक्षर नहीं लेता है, हालांकि। – jonrsharpe

उत्तर

13

बस PyCharm को अनदेखा करें, यह जा रहा है। टिप्पणी स्पष्ट रूप से लागू नहीं होती है जब ऑपरेंड को केवल स्वैप नहीं किया जा सकता है।

संकेत संख्यात्मक ऑपरेटरों के लिए काम करता है क्योंकि a + bb + a के समान परिणाम उत्पन्न करता है, लेकिन स्ट्रिंग्स अतिरिक्त के लिए कम्यूटिव नहीं है और PyCharm को केवल इसे बाहर रखना चाहिए।

तुम सच में संदेश से बचने के लिए चाहते हैं, आप स्ट्रिंग स्वरूपण इस्तेमाल कर सकते हैं:

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

लेकिन मैं परवाह नहीं करते हैं, वास्तव में।

संबंधित मुद्दे