Jaka jest różnica pomiędzy:Różnica w pythonu między ciągiem podstawowym a typami.StringType?
isinstance(foo, types.StringType)
i
isinstance(foo, basestring)
?
Jaka jest różnica pomiędzy:Różnica w pythonu między ciągiem podstawowym a typami.StringType?
isinstance(foo, types.StringType)
i
isinstance(foo, basestring)
?
Dla python2: basestring
jest klasą bazową dla obu str
i unicode
, natomiast types.StringType
jeststr
. Jeśli chcesz sprawdzić, czy coś jest ciągiem, użyj basestring
. Jeśli chcesz sprawdzić, czy coś jest wynikiem testu, użyj str
i zapomnij o types
.
Ten materiał jest zupełnie inna w Python3
types
nie ma już StringType
str
jest zawsze Unicode
basestring
już nie istnieje
Więc staram się nie posypać te rzeczy przez kod zbyt wiele, jeśli może być konieczne jego przeniesienie na:
>>> import types
>>> isinstance(u'ciao', types.StringType)
False
>>> isinstance(u'ciao', basestring)
True
>>>
Wydaje mi się, że to dość ważna różnica ;-).
dla Pythona 2.x:
try:
basestring # added in Python 2.3
except NameError:
basestring = (str, unicode)
...
if isinstance(foo, basestring):
...
Oczywiście to nie może pracować dla Pythona 3, ale jestem pewien, konwerter 2to3 zajmie się tematem.