2011-01-12 12 views
17

संभव डुप्लिकेट:
In Python, how do I determine if an object is iterable?पाइथन में ऑब्जेक्ट को अक्षम करने के लिए कैसे जांचें?

कैसे एक अजगर वस्तु, यात्रा का समर्थन करता है एक चेक अगर एक iterable वस्तु उर्फ ​​करता (see definition

आदर्श रूप में मैं isiterable(p_object) के समान समारोह लौटने चाहते हैं सही या गलत (isinstance(p_object, type) के बाद मॉडलिंग)

उत्तर

52

आप इस का उपयोग कर isinstance और collections.Iterable

>>> from collections import Iterable 
>>> l = [1, 2, 3, 4] 
>>> isinstance(l, Iterable) 
True 
+0

यह केवल नए-शैली के वर्गों के लिए काम करता है और पाइथन 2.6+ की आवश्यकता होती है। –

+0

बस ध्यान दें कि 'str' भी पुनरावर्तनीय है। तो यदि आप 'tuple, list, set'' सोच रहे हैं .. तो उन 3 प्रकारों की जांच करना बेहतर हो सकता है – Shaun

3

के लिए जाँच कर सकते हैं इस कोड

def isiterable(p_object): 
    try: 
     it = iter(p_object) 
    except TypeError: 
     return False 
    return True 
5

आप "जाँच" नहीं है की कोशिश करो। आप मानते हैं

try: 
    for var in some_possibly_iterable_object: 
     # the real work. 
except TypeError: 
    # some_possibly_iterable_object was not actually iterable 
    # some other real work for non-iterable objects. 

अनुमति मांगने से क्षमा मांगना आसान है।

+0

यदि कुछ हड़ताली है तो कोई ब्रेक नहीं होगा लेकिन इसमें कोई प्रविष्टियां नहीं हैं? जैसे यदि आप एक सूची और एक स्ट्रिंग को अलग करना चाहते हैं, तो यह एक स्ट्रिंग के रूप में व्यवहार करने के लिए एक स्मार्ट विचार की तरह प्रतीत नहीं होता है क्योंकि सूची खाली है। –

+0

मैं इससे असहमत हूं। संभावना है कि आप 'अगर नहीं कर सकते हैं' करना चाहते हैं: [obj] 'यह कहने के लिए कि कुछ हमेशा हमेशा सक्षम है। क्लीनर कोड आईएमओ बनाने की अधिक संभावना है। –

+2

दोनों के बीच अंतर करने के तरीके के बिना "असली काम" में किसी भी 'TypeError' को पकड़ता है। –

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