कई मामलों में, पाइथन प्राकृतिक अंग्रेजी की तरह दिखता है और व्यवहार करता है, लेकिन यह एक ऐसा मामला है जहां वह अमूर्तता विफल हो जाती है। लोग संदर्भ संकेतों का उपयोग यह निर्धारित करने के लिए कर सकते हैं कि "जॉन" और "इनबर" ऑब्जेक्ट्स "बराबर" क्रिया में शामिल हो गए हैं, लेकिन पायथन दुभाषिया अधिक शाब्दिक दिमागी है।
if name == "Kevin" or "Jon" or "Inbar":
तार्किक के बराबर है:
if (False) or ("Jon") or ("Inbar"):
or
ऑपरेटर एक सकारात्मक truth value साथ पहला तर्क चुनता है:
if (name == "Kevin") or ("Jon") or ("Inbar"):
कौन सा, उपयोगकर्ता बॉब के लिए, बराबर करने के लिए है
if ("Jon"):
और चूंकि "जॉन" का सकारात्मक सत्य मूल्य है, if
ब्लॉक निष्पादित करता है। दिए गए नाम के बावजूद मुद्रित होने के लिए "पहुंच प्रदान" का कारण बनता है।
यह सभी तर्क अभिव्यक्ति if "Kevin" or "Jon" or "Inbar" == name
पर भी लागू होता है। पहला मान, "Kevin"
, सत्य है, इसलिए if
ब्लॉक निष्पादित करता है।
इस सशर्त को सही तरीके से बनाने के दो सामान्य तरीके हैं।
उपयोग कई ==
ऑपरेटरों को स्पष्ट रूप से प्रत्येक मान के खिलाफ जांच करने के लिए:
if name == "Kevin" or name == "Jon" or name == "Inbar":
मान्य मान का एक अनुक्रम बनाएं, और in
ऑपरेटर का उपयोग सदस्यता के लिए परीक्षण करने के लिए:
if name in ("Kevin", "Jon", "Inbar"):
दो में से सामान्य में पसंदीदा होना चाहिए क्योंकि यह आसान है पढ़ने और तेज़ी से पढ़ने के लिए:
In [1]: name = "Inbar"
In [2]: %timeit name == "Keven" or name == "Jon" or name == "Inbar"
10000000 loops, best of 3: 116 ns per loop
In [3]: %timeit name in ("Keven", "Jon", "Inbar")
10000000 loops, best of 3: 65.2 ns per loop
स्थिति लिखने का सबसे बेवकूफ तरीका 'अगर केविन "," जॉन "," इनबर "] में नाम होगा:' – djinn