回答:
3.0より前のバージョンのPythonでは、「プレーン文字列」と「ユニコード文字列」の2種類の文字列があります。プレーンな文字列(str
)は、ラテンアルファベット以外の文字を表すことはできません(コードページの詳細を無視して簡単にします)。Unicode文字列(unicode
)は、クリンゴン語などの架空の文字を含む任意のアルファベットの文字を表すことができます。
それでは、なぜ2種類の文字列があるのでしょうか?それはすべてのケースをカバーするので、Unicodeだけを持っている方が良いでしょうか?まあ、Unicodeだけを使う方がいいですが、PythonはUnicodeが文字列を表現するための好ましい方法になる前に作成されました。多くのユーザーがいる言語で文字列型を移行するには時間がかかります。Python3.0では、すべての文字列がUnicodeであることが最終的に当てはまります。
3.0より前のPython文字列の継承階層は次のとおりです。
object
|
|
basestring
/ \
/ \
str unicode
Python 2.3で導入された 'basestring'は、オブジェクトがインスタンスであるstr
か、unicode
>>> string1 = "I am a plain string"
>>> string2 = u"I am a unicode string"
>>> isinstance(string1, str)
True
>>> isinstance(string2, str)
False
>>> isinstance(string1, unicode)
False
>>> isinstance(string2, unicode)
True
>>> isinstance(string1, basestring)
True
>>> isinstance(string2, basestring)
True
basestring
とstr
し、bytes
両方のサブクラスをobject
直接。ただし、Py2 str
はPy3と同じではないため、これは理にかなっていることに注意してくださいbytes
。basestring
Py3はのみを持つ「文字列」と考える必要がありstr
ます。したがって、2to3
ツールはに置き換えbasestring
られstr
ます。
str
とbyte
の、まだ子供たちはbasestring
?これについてのメモを追加する価値があります。