Menggabungkan jawaban @jamylak dan @ jpaddison3 bersamaan, jika Anda harus kuat terhadap array numpy sebagai input dan menanganinya dengan cara yang sama seperti daftar, Anda harus menggunakan
import numpy as np
isinstance(P, (list, tuple, np.ndarray))
Ini kuat terhadap subclass daftar, array tuple dan numpy.
Dan jika Anda ingin menjadi kuat terhadap semua subclass urutan lainnya juga (bukan hanya daftar dan tuple), gunakan
import collections
import numpy as np
isinstance(P, (collections.Sequence, np.ndarray))
Mengapa Anda melakukan hal-hal seperti ini dengan isinstancedan tidak membandingkan type(P)dengan nilai target? Berikut adalah contoh, di mana kita membuat dan mempelajari perilaku NewList, subkelas daftar sepele.
>>> 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
Meskipun xdan ymembandingkan sebagai sama, menangani mereka typeakan menghasilkan perilaku yang berbeda. Namun, karena xadalah sebuah contoh dari subclass dari list, menggunakan isinstance(x,list)memberi perilaku yang diinginkan dan memperlakukan xdan ydengan cara yang sama.
type?