[Python] リテラル

リテラルとは、言語の基本的なオブジェクトの表記を指します。以下のリテラルがあります。

整数

数字を並べると、整数になります。sys.maxintが最大値です。-sys.maxint-1が最小値です。この範囲を越えると次のlongになりますが、意識することはありません。

>>> import sys
>>> print sys.maxint
2147483647
>>> n = 2147483647
>>> type(n)
<type 'int'>
>>> n = 2147483648
>>> type(n)
<type 'long'>
>>> n = -2147483648
>>> type(n)
<type 'int'>
>>> n = -2147483649
>>> type(n)
<type 'long'>

整数を0で始めると、8進数になります。また、0xまたは0Xで始めると16進数になります。16進数の場合、10から15はaからf(またはAからF)で表記します。

>>> print 010
8
>>> print 0x10
16
>>> print 0xa
10

長整数

数字を並べた終わりにlまたはLをつけると、長整数になります。が、つけなくても整数の範囲を越えていれば自動的に長整数と認識されるので、普通はつける必要はありません。範囲に限界はありません。

>>> n = 0L
>>> type(n)
<type 'long'>
>>> n = 2147483648
>>> type(n)
<type 'long'>

浮動小数点数

数字とひとつのピリオド、ひとつのeまたはEを並べると、浮動小数点数になります。eまたはEの後には、10のべき乗を記述します。範囲や精度を調べる手段は、ないようです。以下は、すべて浮動小数点数です。

>>> x = 1.
>>> print x
1.0
>>> type(x)
<type 'float'>
>>> x = .1
>>> print x
0.1
>>> type(x)
<type 'float'>
>>> x = 1.0
>>> print x
1.0
>>> type(x)
<type 'float'>
>>> x = 1e1
>>> print x
10.0
>>> type(x)
<type 'float'>
>>> x = 1.0e1
>>> print x
10.0
>>> type(x)
<type 'float'>

虚数

整数(長整数を含む)または浮動小数点数の後にjまたはJをつけると、複素数の虚部を記述することができます。これと整数(長整数を含む)または浮動小数点数との和をとることで、複素数となります。複素数は、real属性で実数部を、imag属性で虚数部を参照できます。

>>> p = 1 + 1j
>>> print p
(1+1j)
>>> type(p)
<type 'complex'>
>>> print p.real
1.0
>>> type(p.real)
<type 'float'>
>>> print p.imag
1.0
>>> type(p.imag)
<type 'float'>

文字列

文字列リテラルには、ダブルクォーテーションひとつ (") でくくるものと、ダブルクォーテーション3つ (""") でくくるものの2種類があります。ダブルクォーテーション3つでくくると、複数行に渡る文字列を記述することができます。

>>> s = "foo"
>>> print s
foo
>>> s = """foo
... bar
... baz"""
>>> print s
foo
bar
baz

他のプログラミング言語では、シングルクォーテーションでくくられた文字列 ('...') とダブルクォーテーションでくくられた文字列 ("...") は区別されることがありますが、Pythonではほぼ同じです。ダブルクォーテーションの代わりに、シングルクォーテーションを使用することもできます。唯一の違いは、文字列中のダブルクォーテーションはエスケープする必要がなく、シングルクォーテーションはエスケープしなければならないという点です。

>>> s = "\"'"
>>> print s
"'
>>> s = '"\''
>>> print s
"'

ダブルクォーテーション(またはシングルクォーテーション)の前に"u"をつけると、ユニコード文字列を表記できます。

>>> s = u"ほげ"
>>> s
u'\u307b\u3052'
>>> type(s)
<type 'unicode'>
>>> s = "foo"
>>> type(s)
<type 'str'>

文字列の中では、バックスラッシュ (\) を使ったエスケープシーケンスを使うことができます。主なエスケープシーケンスを、以下に示します。

形式 説明
\改行 改行。ダブルクォーテーション(またはシングルクォーテーション)ひとつでくくられた文字列を、複数行に渡って記述する場合に使用します。このとき、改行そのものは文字列に含まれません(改行を入れるときは、"\n"を使用します)
\' シングルクォーテーション
\" ダブルクォーテーション
\n 改行(ラインフィード)
\r 復帰(キャリッジリターン)
\t 水平タブ
\xhh ASCII文字。hhは、8ビットの数値の16進数表記
\ooo ASCII文字。oooは、8ビットの数値の8進数表記
\uhhhh ユニコード文字。hhhhは、16ビットの数値の16進数表記。ユニコード文字列中でのみ使用可
\Uhhhhhhhh ユニコード文字。hhhhhhhhは、32ビットの数値の16進数表記。ユニコード文字列中でのみ使用可
\0 Null文字
\\ バックスラッシュそのもの
>>> print "foo\
... bar"
foobar
>>> print "\x66"
f
>>> print "\146"
f
>>> print u"\u0066"
f
>>> print u"\U00000066"
f

ダブルクォーテーション(またはシングルクォーテーション)の前に"r"をつけると、raw文字列となります。"ur"をつけると、ユニコードのraw文字列となります。raw文字列の中では、バックスラッシュ"\"によるエスケープが無効となります。ただし、\uと\Uは、バックスラッシュが奇数個続く場合に限り、有効となります。

>>> print r"\t"
\t
>>> print ur"\u0066"
f
>>> print ur"\\u0066"
\\u0066
>>> print ur"\\\u0066"
\\f
>>> print ur"\U00000066"
f
>>> print ur"\\U00000066"
\\U00000066
>>> print ur"\\\U00000066"
\\f

文字列リテラルを空白文字で区切って複数続けて記述すると、それらの文字列が結合されます。このとき、各文字列リテラルの形式が異なっていても構いません。

>>> print "foo" "bar"
foobar
>>> print "foo" 'bar' "baz\hoge" u"ふが"
foobarbaz\hogeふが

リスト

リストは、要素をコンマ (,) で区切り、全体を"["と"]"でくくります。空のリストは"[]"になります。

>>> ["foo", "bar", "baz"]
['foo', 'bar', 'baz']
>>> []
[]
>

タプル

タプルは、要素をコンマ (,) で区切り、全体を"("と")"でくくります。要素がひとつの場合は、要素そのものと区別をつけるため、","を最後につけます。空のタプルは"()"になります。

>>> ("foo", "bar", "baz")
('foo', 'bar', 'baz')
>>> ("foo", )
('foo',)
>>> ("foo")
'foo'
>>> ()
()

辞書

辞書は、キーと値をコロン (:) で区切ったものを、要素の数だけコンマ (,) で区切って続け、最後に全体をブレース("{"と"}")でくくります。空の辞書は"{}"になります。

>>> { "foo": "bar", "baz": "hoge" }
{'foo': 'bar', 'baz': 'hoge'}
>>> {}
{}