2011-08-12 19 views
10

क्या इन दृष्टिकोणों के बीच कोई निम्न स्तर, कार्यान्वयन-संबंधी अंतर (प्रदर्शन-आईएसएच) है? कम से कमपायथन: किसी के लिए परीक्षण, बूलियन मान के लिए परीक्षण

if some_var is not None: 

की ..instead ..

if not some_var: 

if not some_var:

# check if string is empty 
# the preferred way it seems [1] 
if string: 
    print string 
else: 
    print "It's empty." 

# versus [2] 
if string is '': 

# or [3] 
if string == '': 

उदाहरण के लिए, जब None के लिए परीक्षण, मैं अभी भी इसे और अधिक पठनीय और स्पष्ट करने के लिए लगता है मेरे लिए, हमेशा पढ़ता है "अगर कुछ_वर मौजूद नहीं है"।

जो उपयोग करने के लिए बेहतर है, ==, is और बूल-परीक्षण के लिए उचित उपयोग के मामले क्या हैं?

उत्तर

8

कभी भी (मूल्य) समानता परीक्षण के लिए is का उपयोग न करें। ऑब्जेक्ट पहचान के परीक्षण के लिए केवल इसका इस्तेमाल करें। यह उदाहरण if string is '' उदाहरण के लिए काम कर सकता है, लेकिन यह कार्यान्वयन निर्भर है, और आप इस पर भरोसा नहीं कर सकते हैं।

>>> a = "hi" 
>>> a is "hi" 
True 
>>> a = "hi there!" 
>>> a is "hi there!" 
False 

इसके अलावा, जो भी आपके कोड का अर्थ सबसे अच्छा बताता है उसका उपयोग करें।

मुझे छोटे if string: पसंद है, लेकिन if string != '': अधिक स्पष्ट हो सकता है।

फिर वस्तु के हर तरह पर if variable: काम करता है, इसलिए यदि variable एक प्रकार के लिए ही सीमित नहीं है, इस if variable != "" and variable != 0: आदि

+1

ग्रेट, उत्तर के लिए धन्यवाद। और "जो कुछ भी आपके कोड का अर्थ सबसे अच्छा बताता है" - कोडिंग के दौरान, साथ ही साथ आपके समाधानों का बचाव करते समय विचार करना एक बड़ी बात है। – maligree

2

सबसे पहले की तुलना में बेहतर है, if string is '': का उपयोग नहीं करते, क्योंकि इस काम के लिए गारंटी नहीं है । तथ्य यह है कि सीपीथॉन छोटे तारों को प्रशिक्षित करता है एक कार्यान्वयन विस्तार है और इस पर भरोसा नहीं किया जाना चाहिए।

if string: का उपयोग करके string यह जांचने के लिए गैर-खाली है, मुझे लगता है कि ऐसा करने के लिए एक पाइथोनिक तरीका है।

लेकिन गलतif string == '' का उपयोग करने के बारे में कुछ भी नहीं है।

+0

ठीक है, बढ़िया। क्या आप 'सीपीथन इंटर्न शॉर्ट स्ट्रिंग' पर विस्तार कर सकते हैं, या मुझे कहीं और बता सकते हैं कि मुझे और जानकारी मिल सकती है? – maligree

+0

http://en.wikipedia.org/wiki/String_interning शुरू करने के लिए एक जगह होगी :) –

+0

... मुझे हास्यास्पद लगता है। आधा सो जाना चाहिए, jfGit के लिए भूल गया। धन्यवाद! – maligree

5

टिम Pietzcker के जवाब पर विस्तार करने के लिए:

if string: 
    print string 

यह परीक्षण करता है, तो string सही पर मूल्यांकन करता है। अर्थात।

>>> bool("") 
False 
>>> bool(None) 
False 
>>> bool("test") 
True 

तो यह केवल अगर यह रिक्त है परीक्षण नहीं कर रहा है, लेकिन अगर यह None या खाली है। None/खाली के इलाज के तरीके के आधार पर इसका असर हो सकता है।

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