अजगर में टाइप == सूची की जाँच की जा रही है


185

मैं यहाँ एक मस्तिष्क गोज़ हो सकता है, लेकिन मैं वास्तव में यह पता नहीं लगा सकता कि मेरे कोड में क्या गलत है:

for key in tmpDict:
    print type(tmpDict[key])
    time.sleep(1)
    if(type(tmpDict[key])==list):
        print 'this is never visible'
        break

आउटपुट है, <type 'list'>लेकिन अगर स्टेटमेंट कभी ट्रिगर नहीं होता है। क्या कोई मेरी त्रुटि यहाँ देख सकता है?


3
क्या आपने listकहीं एक चर के रूप में उपयोग किया है? खबरदार कि अगर आप आरईपीएल या इस तरह से काम कर रहे हैं तो कुछ समय पहले से इसे फिर से परिभाषित किया जा सकता है।
Ffisegydd

..... Woooowww ... निश्चित रूप से नरम टाइप की भाषाओं की कमियों के बारे में एक सबक। वाह ...
बेंजामिन लिंडक्विस्ट

इसे उत्तर के रूप में जोड़ें और मैं स्वीकार करूंगा। धन्यवाद।
बेंजामिन लिंडक्विस्ट

1
Pylint और दोस्त आपको भविष्य में मदद करेंगे (मैं इसे एक कमी नहीं कहूंगा, वास्तव में)।

जवाबों:


140

आपका मुद्दा यह है कि आपने listपहले अपने कोड में एक चर के रूप में फिर से परिभाषित किया है। इसका मतलब यह है कि जब आप करते हैं type(tmpDict[key])==listअगर Falseवे वापस आ जाएंगे क्योंकि वे बराबर नहीं हैं।

यह कहा जा रहा है, आपको इसके बजाय isinstance(tmpDict[key], list)किसी चीज़ के प्रकार का परीक्षण करते समय उपयोग करना चाहिए , यह ओवरराइटिंग की समस्या से नहीं बचा होगा, listलेकिन प्रकार की जांच करने का एक अधिक पायथोनिक तरीका है।


अच्छा लगा। 'अधिक पायथोनिक' एक विस्तृत अवधारणा है। सिर्फ शिक्षा के लिए: अंतर-के-बीच-प्रकार-और-आइंस्टीन क्या हैं?
जावी

222

आपको प्रयोग करके देखना चाहिए isinstance()

if isinstance(object, list):
       ## DO what you want

आपके मामले में

if isinstance(tmpDict[key], list):
      ## DO SOMETHING

समझाने के लिए:

x = [1,2,3]
if type(x) == list():
    print "This wont work"
if type(x) == list:                  ## one of the way to see if it's list
    print "this will work"           
if type(x) == type(list()):
    print "lets see if this works"
if isinstance(x, list):              ## most preferred way to check if it's list
    print "This should work just fine"

संपादित करें 1: के बीच का अंतर isinstance()और type()और क्यों isinstance()की जांच करने के लिए सबसे पसंदीदा तरीका है कि है isinstance(), इसके अलावा में चेकों उपवर्गों जबकि type()ऐसा नहीं करता।




0

हालांकि isinstance(x, list)एक के रूप में के रूप में अच्छी तरह से उपयोग नहीं कर सकता सीधा :

this_is_a_list=[1,2,3]
if type(this_is_a_list) == type([]):
    print("This is a list!")

और मुझे उस की सरल चतुराई पसंद है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.