2011-01-12 31 views

cevap

52

Bu kodu

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

Bu yalnızca yeni stil sınıfları için çalışır ve Python 2.6+ gerektirir. –

+0

Sadece 'str'nin tekrarlanabileceğini unutmayın. Yani, tuple, liste, set 'düşünüyorsanız .. sadece bu 3 tip için kontrol etmek daha iyi olabilir – Shaun

3

isinstance ve collections.Iterable kullanarak kontrol edebilirsiniz. Varsayıyorum.

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. 

Affetmek için izin istemekten daha kolaydır.

5

Sen "onay" do not İstek

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

Bir şey yinelenebilir ama hiçbir girişleri varsa bu kırmak olmaz mı? Örneğin. Bir listeyi ve bir dizeyi anlatmak isteseydiniz, listenin boş olması nedeniyle onu bir ip gibi ele almak akıllıca bir fikir gibi görünmez. –

+0

Buna katılmıyorum. Şanslar, eğer yinelenmezse: [obj] 'bir şeyin her zaman DAĞILIMI olduğunu iddia etmek için yapmak isteyeceğinizdir. Daha temiz kod almak için daha fazla imo. –

+2

Bu ikisi arasında ayrım yapmak için bir yol olmadan "gerçek iş" içinde herhangi bir "TypeError" yakalar. –

İlgili konular