2013-07-12 7 views
7

मुझे पता है कि यह कुछ लोगों द्वारा फंस गया है, लेकिन मुझे पायथन के टर्नरी ऑपरेटर का उपयोग करना पसंद है, क्योंकि यह पढ़ने के लिए सरल if/else कथन क्लीनर (मुझे लगता है) बनाता है। किसी भी घटना में, मैंने पाया कि मैं ऐसा नहीं कर सकते:पायथन टर्नरी ऑपरेटर एकाधिक मान वापस नहीं कर सकता है?

>>> a,b = 1,2 if True else 0,0 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: too many values to unpack 

तरह से मैं लगा त्रिगुट ऑपरेटर काम करता है कि यह अनिवार्य रूप से बनाता है निम्नलिखित है:

if True: 
    a,b = 1,2 
else: 
    a,b = 0,0 

कोई समझा सकते हैं क्यों मेरा पहला कोड नमूना काम नहीं करता है? और, यदि कोई है, तो कई चरों को सशर्त रूप से असाइन करने के लिए एक-लाइनर प्रदान करें?

उत्तर

12

यह पार्स करने जाता है कि तीन मानों, जो कर रहे हैं के रूप में:

1, 
2 if True else 0, 
0 

इसलिए यह तीन मूल्यों (1,2,0) है, जो अभिव्यक्ति की बाईं ओर स्थित दो मानों की तुलना में अधिक है हो जाता है।

प्रयास करें:

a,b = (1,2) if True else (0,0) 
+1

अच्छा ol ' "अल्पविराम ऑपरेटर सशर्त त्रिगुट की तुलना में कम पूर्वता है" ... यहां तक ​​कि सी में काम करता है .. –

+0

आह, बहुत बहुत धन्यवाद! – Valdogg21

+0

@ Valdogg21 आपका स्वागत है :) – Doorknob

2

यह ऑपरेटर पूर्वता का मामला है। पर विचार करें:

>>> 1,2 if True else 0,0 
(1, 2, 0) 

कोष्ठक, आवश्यकतानुसार जोड़ें और आप उसे काम करने के लिए मिल जाएगा:

(1,2) if True else (0,0) 
संबंधित मुद्दे