2012-01-11 9 views
10

मैं क्यों
True and []
रिटर्न [] झूठीआउटपुट और []

के बजाय सोच रहा था अभिव्यक्ति एक वाक्यात्मक चीनी है?

+0

बहुत अच्छा सवाल, मुझे कभी नहीं पता था। मेरे पास पहले से ही मेरे कोड के कुछ पहलुओं में इस प्रयोज्यता की योजना है जहां सच्ची सीट्यूअन को खाली सूची वापस करने की आवश्यकता होगी। आप देखते हैं कि रेखा गलत है और [], यह झूठी रिटर्न देता है। अच्छा .. :) –

उत्तर

17

जवाब 5.10. Boolean Expressions में पाया जाता है:

अभिव्यक्ति x and y पहले का मूल्यांकन करता है एक्स; यदि x गलत है, तो इसका मूल्य वापस आ गया है; अन्यथा, वाई का मूल्यांकन किया गया है और परिणामी मूल्य वापस कर दिया गया है।

2

यह वाक्यात्मक चीनी कभी कभी अजगर में एक ternary operator के रूप में प्रयोग किया जाता है

C++: someVar = someCondition ? valueIfTrue : valueIfFalse; 
Python: someVar = someCondition and valueIfTrue or valueIfFalse 

संपादित करें: यह पता चला, के रूप में टिप्पणी प्रति :), इस अजगर में एक प्रमुख ख़तरा है और द्वारा प्रतिस्थापित किया जाना चाहिए

someVar = valueIfTrue if condition else valueIfFalse 
+3

कृपया ध्यान दें कि ये बराबर नहीं हैं, पाइथन संस्करण में एक गॉचा है: यदि 'valueIfTrue'' गलत 'का मूल्यांकन करता है, तो' valueIfFalse' वापस कर दिया जाएगा चाहे 'कुछ कंडिशन' सही है या 'गलत' । इस pitfall से बचने के लिए 'someVar = valueIfTrue अगर कुछ कंडिशन अन्य मान IFFalse' का उपयोग करें। –

+0

काम नहीं करता है यदि 'valueIfTrue' किसी गलत मान का मूल्यांकन करता है। फिर 'valueIfTrue का उपयोग करना बेहतर है अगर कुछ और शर्त मान IFFalse' (2.5 के बाद से)। बीटीडब्ल्यू: '? : मूल रूप से सी से आता है, सी ++ से नहीं। – glglgl

+1

1. यह वाक्य रचनात्मक चीनी नहीं है। यह सिर्फ ... वाक्यविन्यास है। (अन्यथा: इसके लिए चीनी क्या है?)। 2. पायथन में 'ए और बी या सी 'गलत है। जब आप इसका मतलब नहीं लेते हैं तो यह 'c' का मूल्यांकन कर सकता है। – Celada

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