python - पायथन में एकाधिक असाइनमेंट और मूल्यांकन ऑर्डर




assignment-operator (6)

असाइनमेंट स्टेटमेंट में, वैरिएबल की वास्तविक सेटिंग करने से पहले दाएं हाथ की तरफ हमेशा मूल्यांकन किया जाता है। इसलिए,

x, y = y, x + y

y मूल्यांकन करता है (चलिए परिणाम ham कॉल करते हैं), x + y मूल्यांकन करता है ( spam कॉल करें), फिर x को ham और y को spam सेट करता spam । हां, यह पसंद है

ham = y
spam = x + y
x = ham
y = spam

इसके विपरीत,

x = y
y = x + y

x को y सेट करता है, फिर y को x (जो == y ) प्लस y सेट करता है, इसलिए यह बराबर है

x = y
y = y + y

निम्नलिखित पायथन अभिव्यक्तियों के बीच क्या अंतर है:

# First:

x,y = y,x+y

# Second:

x = y
y = x+y

पहले दूसरे से अलग परिणाम देता है।

जैसे,

प्रथम:

>>> x = 1
>>> y = 2
>>> x,y = y,x+y
>>> x
2
>>> y
3

दूसरा:

>>> x = 1
>>> y = 2
>>> x = y
>>> y = x+y
>>> x
2
>>> y
4

वाई पहले में 3 और दूसरे में 4 है


चलो अंतर फोकस करते हैं।

x, y = y, x + y यह एक्स टुपल xssignment, mexns (x, y) = (y, x + y) , बस (x, y) = (y, x)

एक्स त्वरित उदाहरण से Stxrt:

x, y = 0, 1
#equivxlent to
(x, y) = (0, 1)
#implement xs
x = 0
y = 1

जब (x, y) = (y, x + y) ExFP की बात आती है, तो x को सीधे प्रयास करें

x, y = 0, 1
x = y #x=y=1
y = x + y #y=1+1
#output
In [87]: x
Out[87]: 1
In [88]: y
Out[88]: 2

तथापि,

In [93]: x, y = y, x+y
In [94]: x
Out[94]: 3
In [95]: y
Out[95]: 5

परिणाम पहली कोशिश से अलग है।

Thx है क्योंकि पाइथन पहले दाएं हाथ x+y मूल्यांकन करता है तो यह equivxlent करने के लिए:

old_x = x
old_y = y
c = old_x + old_y
x = old_y
y = c

संक्षेप में, x, y = y, x+y मतलब है,
x एक्सचेंजों को y पुराना_वल्यू प्राप्त करने के लिए,
पुराने x और पुराने मूल्य y के योग प्राप्त करने के लिए y एक्सचेंज


पहला एक टुपल जैसा असाइनमेंट है:

x,y = y,x+y

जहां x tuple का पहला तत्व है, और y दूसरा तत्व है, इस प्रकार आप जो कर रहे हैं वह है:

x = y
y = x+y

वेरास दूसरा सीधा असाइन कर रहा है:

x=y
x=x+y

पहली अभिव्यक्ति:

  1. मूल्य y,x+y साथ एक अस्थायी tuple बनाता है
  2. एक और अस्थायी tuple में सौंपा गया
  3. x और y चर के लिए tuple निकालें

दूसरा कथन वास्तव में दो अभिव्यक्तियों के बिना, दो अभिव्यक्तियों के बिना है।

आश्चर्य है, पहली अभिव्यक्ति वास्तव में है:

temp=x
x=y
y=temp+y

आप " पेंटिनेटेड रूपों " में अल्पविराम के उपयोग के बारे में अधिक जान सकते हैं।


यह "मूल्यांकन आदेश" नामक अनुभाग में दस्तावेज़ों में समझाया गया है:

... एक असाइनमेंट का मूल्यांकन करते समय दाएं हाथ की ओर बाएं हाथ की ओर मूल्यांकन किया जाता है।


a, b = 0, 1
while b < 10:
print(b)
a, b = b, a+b

उत्पादन

1
1
2
3
5
8

वेरिएबल ए और बी के साथ-साथ नए मान 0 और 1 प्राप्त होते हैं, वही ए, बी = बी, ए + बी, ए और बी एक साथ असाइन किए जाते हैं।







assignment-operator