@Jamylak और @ jpaddison3 के उत्तरों को एक साथ मिलाकर, यदि आपको इनपुट के रूप में संख्यात्मक सरणियों के खिलाफ मजबूत होना है और उन्हें सूचियों की तरह से संभालना है, तो आपको उपयोग करना चाहिए
import numpy as np
isinstance(P, (list, tuple, np.ndarray))
यह सूची, टपल और सुन्न सरणियों के उपवर्गों के खिलाफ मजबूत है।
और यदि आप अनुक्रम के अन्य सभी उपवर्गों के खिलाफ मजबूत होना चाहते हैं (न कि केवल सूची और तुच्छ), का उपयोग करें
import collections
import numpy as np
isinstance(P, (collections.Sequence, np.ndarray))
आपको इस तरह से चीजों को क्यों करना चाहिए isinstance
और type(P)
लक्ष्य मूल्य के साथ तुलना नहीं करनी चाहिए ? यहां एक उदाहरण है, जहां हम NewList
सूची के एक तुच्छ उपवर्ग का व्यवहार बनाते हैं और उसका अध्ययन करते हैं ।
>>> class NewList(list):
... isThisAList = '???'
...
>>> x = NewList([0,1])
>>> y = list([0,1])
>>> print x
[0, 1]
>>> print y
[0, 1]
>>> x==y
True
>>> type(x)
<class '__main__.NewList'>
>>> type(x) is list
False
>>> type(y) is list
True
>>> type(x).__name__
'NewList'
>>> isinstance(x, list)
True
बराबर होने x
और y
तुलना करने के बावजूद , उन्हें संभालने type
से अलग व्यवहार होगा। हालाँकि, चूंकि x
एक उपवर्ग का एक उदाहरण है list
, का उपयोग isinstance(x,list)
करना वांछित व्यवहार और व्यवहार x
और y
उसी तरीके से देता है।
type
?