とほほのPython入門 - 数値・文字列・型

トップ > Python入門 > 数値・文字列・型

整数(int)

整数(int)は下記の様に記述します。

Python
num = 1234        # 正の整数

0o(0O), 0x(0X), 0b(0B) はそれぞれ、8進数、16進数、2進数を意味します。

Python
num = 0o777        #  8進数 (0oで始まる数値は 8進数とみなされる)
num = 0xffff       # 16進数 (0xで始まる数値は16進数とみなされる)
num = 0b11000100   #  2進数 (0bで始まる数値は 2進数とみなされる)

長整数(long)

長整数(long)は、整数(int)を超える桁数の整数を扱います。末尾に lL をつけますが、l は 1 と間違えやすいので L を使うのがよいでしょう。整数(int)の最大値(sys.maxint)はシステムにより異なり、231-1 だったり 263-1 だったりします。

Python
num = 9223372036854775808L

長整数は、メモリが許す限り桁数に制限はなく、長整数同士の演算では計算誤差も生じません。

Python
num = 1234567890123456789012345678901234567890123456789012345678901234567890L

Python 3 では、整数(int) と長整数(long)は統合され、すべて整数(int)として扱われるようになり、Ll も廃止されました。

Python
num = 123L       # Python 3 ではエラー(SyntaxError例外)

浮動小数点数(float)

浮動少数点数(float)は下記の様に記述します。e2 は 10の2乗を意味します。

Python
num = 1.234     # 浮動小数点数
num = 1.2e3     # 浮動小数点数(指数表記) 1.2 × 103
num = 1.2E-3    # 浮動小数点数(指数表記) 1.2 × 10-3

虚数(complex)

虚数(complex)には j または J をつけます。

Python
num = 3.14j

論理値(bool)

論理値(bool)は、True または False で表します。最初の1文字は大文字で記述します。

Python
bool = True
bool = False

Python では、False、数値の 0 や 0.0、空文字("")、空リスト([])、空タプル(())、空辞書({})などを偽とみなし、それ以外を真とみなします。

文字列(str)

文字列(str)は、ダブルクォート(")、またはシングルクォート(')で囲みます。

Python
str = "Hello world"
str = 'Hello world'

"..." の中では ' を、'...' の中では " を使うことができます。"..." の中で " を、'...' の中で ' を使用するには、バックスラッシュ(\)を用いて引用符をエスケープ(無効化)します。

Python
str = "We can use \" in the string."
str = 'We can use \' in the string.'

バックスラッシュ(\)を用いることで、複数行に分けることができます。

Python
str = 'Hello \
world!'

"..." や '...' の前に r または R をつけると、後述するエスケープシーケンスが無視されます。

Python
str = 'aaa\nbbb'        # \n は改行とみなされる
str = r'aaa\nbbb'       # \n はバックスラッシュ(\)と小文字nとみなされる

三重クォート """..."""'''...''' は、複数行にまたがった文字列を記述することができます。三重クォートはしばしば、複数行のコメントとして利用されることがあります。

Python
str = """A simple example module
This module is ...
"""

複数の文字列をスペースで区切ることで、連結することができます。

Python
print 'Hello ' 'world!'

Unicode文字列(unicode)とバイト列(bytes)

Python 2 では、日本語など ASCII 以外の文字を扱うには、u"..." や u'...' を用いた Unicode文字列(unicode) とする必要がありました。

Python
# Python 2
len = len(u'あいうえお')       # ちゃんと5文字として数えられる
len = len('あいうえお')        # Unicodeに対応していないため15文字と数えられる

Python 3.0 では u が廃止され、"..." や '...' が Unicodeも扱える文字列(str)を示すようになりました。代わりにバイト列(bytes)を示す b"..." がサポートされました。Python 3.3 では互換性考慮のため u"..." が文字列(str)として復活しました。Python 2 では b"..." は文字列(str)として扱います。

"..."
'...'
u"..."
u'...'
b"..."
b'...'
Python 2.x 文字列(str) Unicode文字列(unicode) 文字列(str)
Python 3.0-3.2 文字列(str) SyntaxError バイト列(bytes)
Python 3.3- 文字列(str) 文字列(str) バイト列(bytes)

Python 3 でバイト列(bytes)とUnicodeを含む文字列(str)を変換するには下記の様にします。

Python
byte_string = b"\xe3\x81\x82"
utf8_string = byte_string.decode()    // バイト列から文字列に変換
print(utf8_string)

utf8_string = "あ"
byte_string = utf8_string.encode()    // 文字列からバイト列に変換
print(byte_string)

Shift_JIS/EUC/JISとの変換

Python 3 では、シフトJIS(Shift_JIS)、Windows版シフトJIS(CP932)、EUC(EUC-JP) や ISO-2022-JP(俗にいうJISコード) などの文字列はバイト列(bytes)として扱います。Unicode文字列(str)とバイト列(bytes)を変換するには下記の様にします。

Python
# Unicode文字列からUTF8/SJIS/CP932/EUC/JISバイト列への変換
utf8_str = "あ"
utf8_bytes = utf8_str.encode('utf-8')             # UTF-8バイト列: b'\xe3\x81\x82'
sjis_bytes = utf8_str.encode('sjis')              # Shift_JISバイト列: b'\x82\xa0'
cp932_bytes = utf8_str.encode('cp932')            # CP932バイト列: b'\x82\xa0'
eucjp_bytes = utf8_str.encode('euc_jp')           # EUC-JPバイト列: b'\xa4\xa2'
jis_bytes = utf8_str.encode('iso2022_jp')         # ISO-2022-JPバイト列: b'\x1b$B$"\x1b(B'

# UTF8/SJIS/CP932/EUC/JISバイト列からUnicode文字列への変換
utf8_str = utf8_bytes.decode('utf-8')             # あ
utf8_str = sjis_bytes.decode('sjis')              # あ
utf8_str = cp932_bytes.decode('cp932')            # あ
utf8_str = eucjp_bytes.decode('euc_jp')           # あ
utf8_str = jis_bytes.decode('iso2022_jp')         # あ

エスケープシーケンス(\x)

文字列の中では、下記のエスケープシーケンスを使用できます。

エスケープシーケンス
\改行 : バックスラッシュと改行が無視される
\\ : バックスラッシュ(\)
\' : シングルクォート(')
\" : ダブルクォート(")
\a : ベル(BEL)
\b : バックスペース(BS)
\f : フォームフィード(FF)
\n : 改行(LF)
\r : 復帰(CR)
\t : タブ(TAB)
\v : 垂直タブ(VT)
\nnn : 8進表記文字(nは0~7)
\xnn : 16進表記文字(nは0~f)
\uxxxx : ユニコード文字xxxx (例: u"\u3042")
\U....xxxx : ユニコード文字xxxxxxxx (例: U"\U00003042")
\N{name} : Unicodeデータベース文字 (例: u"\N{HIRAGANA LETTER A}")

文字列のフォーマット(%)

% 演算子を用いて、C言語の printf()文に似た記法で、下記の様に文字列を フォーマット することができます。ひとつ目の変数 errmsg の値が %s の箇所に、ふたつ目の変数 errcode の値が %d の箇所に挿入されます。

Python
errmsg = "Can't open file"
errcode = 19042
msg = "ERROR: %s (%d)" % (errmsg, errcode)
print msg                                    #=> ERROR: Can't open file (19042)

%s は文字列、%d は整数、%f は浮動小数点数、%x は16進数、%o は8進数、%% は %自身を示します。

Python
print "%s" % "ABC"          #=> ABC
print "%d" % 123            #=> 123
print "%f" % 1.23           #=> 1.23
print "%x" % 255            #=> ff
print "%o" % 255            #=> 377
print "%%%d" % 80           #=> %80

% に続く数値で文字幅や桁数を指定することができます。

Python
print "|%5s|" % 'ABC'        #=> |  ABC| : 右寄せ5文字分
print "|%-5s|" % 'ABC'       #=> |ABC  | : 左寄せ5文字分
print "|%5d|" % 123          #=> |  123| : 右寄せ5桁
print "|%-5d|" % 123         #=> |123  | : 左寄せ5桁
print "|%+5d|" % 123         #=> | +123| : ±符号付き
print "|%5.2f|" % 1.23       #=> | 1.23| : 全体桁数.少数点以下の桁数
print "|%05d|" % 123         #=> |00123| : 0埋め

Copyright(C) 2014-2019 杜甫々
初版:2014年12月30日、最終更新:2019年10月7日
http://www.tohoho-web.com/python/types.html