Pythonの基本データ型

Pythonの基本データ型

これで、how to interact with the Python interpreter and execute Python codeがわかりました。 Python言語を掘り下げてみましょう。 最初に、Pythonに組み込まれている基本的なデータ型について説明します。

このチュートリアルで学習する内容は次のとおりです。

  • Pythonに組み込まれているいくつかの基本的なnumeric, stringBooleanのタイプについて学習します。 このチュートリアルの終わりまでに、これらのタイプのオブジェクトがどのように見えるか、そしてそれらをどのように表現するかを理解できます。

  • Pythonの組み込みfunctions.の概要も表示されます。これらは、便利なことを行うために呼び出すことができる、事前に記述されたコードのチャンクです。 組み込みのprint()関数はすでに見てきましたが、他にもたくさんあります。

無料のPDFダウンロード: Python3チートシート

__ Take the Quiz:インタラクティブな「Pythonの基本データ型」クイズで知識をテストします。 完了すると、学習の進捗状況を経時的に追跡できるようにスコアを受け取ります。

整数

Python 3では、整数値の長さに制限はありません。 もちろん、すべてのものと同様に、システムにあるメモリの量によって制約されますが、それを超えると、整数は必要な限り長くなります:

>>>

>>> print(123123123123123123123123123123123123123123123123 + 1)
123123123123123123123123123123123123123123123124

Pythonは、プレフィックスなしの一連の10進数を10進数として解釈します。

>>>

>>> print(10)
10

次の文字列を整数値の前に追加して、10以外の基数を示すことができます。

接頭辞 解釈 Base

0b(ゼロ+小文字'b'
0B(ゼロ+大文字'B'

バイナリ

2

0o(ゼロ+小文字'o'
0O(ゼロ+大文字'O'

オクタル

8

0x(ゼロ+小文字'x'
0X(ゼロ+大文字'X'

16進数

16

例えば:

>>>

>>> print(0o10)
8

>>> print(0x10)
16

>>> print(0b10)
2

10進数以外の整数値の詳細については、次のWikipediaサイトを参照してください:BinaryOctal、およびHexadecimal

Python整数の基になる型は、それを指定するために使用されるベースに関係なく、intと呼ばれます。

>>>

>>> type(10)

>>> type(0o10)

>>> type(0x10)

Note:これは、REPLセッション中に値を表示する場合は、print()関数を使用する必要がないことを言及する良い機会です。 >>>プロンプトで値を入力し、[.kbd .key-enter]#Enter#を押すだけで、次のように表示されます。

>>>

>>> 10
10
>>> 0x10
16
>>> 0b10
2

このチュートリアルシリーズの例の多くは、この機能を使用します。

これはスクリプトファイル内では機能しないことに注意してください。 スクリプトファイルの行に単独で表示される値は何もしません。

浮動小数点数

Pythonのfloat型は、浮動小数点数を指定します。 floatの値は小数点で指定されます。 オプションで、文字eまたはEの後に正または負の整数を追加して、scientific notationを指定できます。

>>>

>>> 4.2
4.2
>>> type(4.2)

>>> 4.
4.0
>>> .2
0.2

>>> .4e7
4000000.0
>>> type(.4e7)

>>> 4.2e-4
0.00042

ディープダイブ:浮動小数点表現

以下は、Pythonが内部的に浮動小数点数を表現する方法に関するもう少し詳細な情報です。 このレベルを理解していなくても、Pythonで浮動小数点数を簡単に使用できます。そのため、これが過度に複雑になっても心配しないでください。 興味がある場合に備えて、ここに情報を示します。

ほとんどすべてのプラットフォームは、IEEE 754標準に従って、Pythonfloat値を64ビットの「倍精度」値として表します。 その場合、浮動小数点数が持つことができる最大値は約1.8⨉10308です。 Pythonは、文字列infによってそれより大きい数を示します。

>>>

>>> 1.79e308
1.79e+308
>>> 1.8e308
inf

ゼロ以外の数値がゼロに最も近いのは、約5.0⨉10-324です。 それよりゼロに近いものは事実上ゼロです:

>>>

>>> 5e-324
5e-324
>>> 1e-325
0.0

浮動小数点数は、内部的に2進(基数2)分数として表されます。 ほとんどの小数部は2進小数部として正確に表現できないため、ほとんどの場合、浮動小数点数の内部表現は実際の値の近似値です。 実際には、実際の値と表示される値の差は非常に小さく、通常は重大な問題を引き起こすことはありません。

Further Reading: Pythonでの浮動小数点表現とそれに伴う潜在的な落とし穴の詳細については、PythonドキュメントのFloating Point Arithmetic: Issues and Limitationsを参照してください。

複素数

複素数は<real part>+<imaginary part>jとして指定されます。 例えば:

>>>

>>> 2+3j
(2+3j)
>>> type(2+3j)

文字列

文字列は、文字データのシーケンスです。 Pythonの文字列型はstrと呼ばれます。

文字列リテラルは、一重引用符または二重引用符を使用して区切ることができます。 開始区切り文字と一致する終了区切り文字の間のすべての文字は、文字列の一部です。

>>>

>>> print("I am a string.")
I am a string.
>>> type("I am a string.")


>>> print('I am too.')
I am too.
>>> type('I am too.')

Pythonの文字列には、必要な数の文字を含めることができます。 唯一の制限は、マシンのメモリリソースです。 文字列は空にすることもできます:

>>>

>>> ''
''

文字列自体の一部として引用文字を含めたい場合はどうしますか? あなたの最初の衝動は、次のようなものを試すことです:

>>>

>>> print('This string contains a single quote (') character.')
SyntaxError: invalid syntax

ご覧のとおり、それはあまりうまくいきません。 この例の文字列は一重引用符で開きます。したがって、Pythonは次の単一引用符、つまり文字列の一部となるかっこ内の引用符が閉じ区切り文字であると想定します。 その場合、最後の単一引用符は迷い、表示される構文エラーを引き起こします。

文字列内にいずれかのタイプの引用文字を含める場合、最も簡単な方法は、文字列を他のタイプで区切ることです。 文字列に一重引用符を含める場合は、二重引用符で区切ります。逆も同様です。

>>>

>>> print("This string contains a single quote (') character.")
This string contains a single quote (') character.

>>> print('This string contains a double quote (") character.')
This string contains a double quote (") character.

文字列のエスケープシーケンス

場合によっては、Pythonで文字列内の文字または文字シーケンスを異なる方法で解釈する必要があります。 これは、次の2つの方法のいずれかで発生する可能性があります。

  • 特定の文字は通常文字列内で与えられるという特別な解釈を抑制したい場合があります。

  • 通常は文字どおりに解釈される文字列内の文字に特別な解釈を適用することができます。

これは、円記号(\)文字を使用して実行できます。 文字列内のバックスラッシュ文字は、それに続く1つ以上の文字を特別に扱う必要があることを示します。 (これはエスケープシーケンスと呼ばれます。これは、バックスラッシュによって後続の文字シーケンスが通常の意味を「エスケープ」するためです。)

これがどのように機能するか見てみましょう。

特殊文字の意味の抑制

文字列に引用文字を含めようとすると、直面する可能性のある問題をすでに見ました。 文字列が一重引用符で区切られている場合、文字列の一部として一重引用符を直接指定することはできません。その文字列では、一重引用符が特別な意味を持ち、文字列を終了するからです。

>>>

>>> print('This string contains a single quote (') character.')
SyntaxError: invalid syntax

文字列の引用文字の前にバックスラッシュを指定すると、文字が「エスケープ」され、Pythonは通常の特別な意味を抑制します。 次に、単純なリテラル一重引用符文字として解釈されます。

>>>

>>> print('This string contains a single quote (\') character.')
This string contains a single quote (') character.

同じことは、二重引用符で区切られた文字列でも機能します。

>>>

>>> print("This string contains a double quote (\") character.")
This string contains a double quote (") character.

以下は、Pythonが文字列内の文字の通常の特別な解釈を抑制するエスケープシーケンスの表です。

エスケープ
シーケンス
バックスラッシュ後の
文字の通常の解釈
「エスケープされた」解釈

\'

一重引用符で始まる区切り文字で文字列を終了します

リテラルの一重引用符(')文字

\"

二重引用符で始まる区切り文字で文字列を終了します

リテラル二重引用符(")文字

\newline

入力行を終了します

改行は無視されます

\\

エスケープシーケンスを導入

リテラルの円記号(\)文字

通常、改行文字は行入力を終了します。 したがって、文字列の途中で[.kbd .key-enter]#Enter#を押すと、Pythonはそれが不完全であると見なします。

>>>

>>> print('a

SyntaxError: EOL while scanning string literal

文字列を複数行に分割するには、各改行の前にバックスラッシュを含めます。改行は無視されます:

>>>

>>> print('a\
... b\
... c')
abc

文字列にリテラルバックスラッシュを含めるには、バックスラッシュでエスケープします。

>>>

>>> print('foo\\bar')
foo\bar
キャラクターに特別な意味を適用する

次に、タブ文字を含む文字列を作成する必要があるとします。 一部のテキストエディタでは、タブ文字をコードに直接挿入できます。 しかし、多くのプログラマーは、いくつかの理由で、その悪い練習を考慮します:

  • コンピューターはタブ文字と一連のスペース文字を区別できますが、できません。 コードを読む人間にとって、タブ文字とスペース文字は視覚的に区別できません。

  • 一部のテキストエディターは、タブ文字を適切な数のスペースに展開することでタブ文字を自動的に削除するように構成されています。

  • 一部のPython REPL環境では、コードにタブが挿入されません。

Python(および他のほとんどすべての一般的なコンピューター言語)では、タブ文字はエスケープシーケンス で指定できます。

>>>

>>> print('foo\tbar')
foo     bar

エスケープシーケンス により、t文字は通常の意味、つまりリテラルtの意味を失います。 代わりに、組み合わせはタブ文字として解釈されます。

Pythonに文字どおりに解釈する代わりに特別な意味を適用させるエスケープシーケンスのリストを次に示します。

エスケープシーケンス 「エスケープされた」解釈

\a

ASCIIベル(BEL)文字

\b

ASCIIバックスペース(BS)文字

\f

ASCIIフォームフィード(FF)文字

\n

ASCII改行(LF)文字

\N{}

指定された<name>を持つUnicodeデータベースの文字

\r

ASCIIキャリッジリターン(CR)文字

\t

ASCII水平タブ(TAB)文字

\uxxxx

16ビットの16進値xxxxのUnicode文字

\Uxxxxxxxx

32ビットの16進値xxxxxxxxのUnicode文字

\v

ASCII垂直タブ(VT)文字

\oxx

8進値がxxの文字

\xhh

16進値がhhの文字

例:

>>>

>>> print("a\tb")
a    b
>>> print("a\141\x61")
aaa
>>> print("a\nb")
a
b
>>> print('\u2192 \N{rightwards arrow}')
→ →

このタイプのエスケープシーケンスは、通常、キーボードから簡単に生成されない文字や、簡単に読み取りまたは印刷できない文字を挿入するために使用されます。

生ストリング

生の文字列リテラルの前にはrまたはRがあります。これは、関連付けられた文字列のエスケープシーケンスが変換されないことを指定します。 バックスラッシュ文字は文字列に残ります:

>>>

>>> print('foo\nbar')
foo
bar
>>> print(r'foo\nbar')
foo\nbar

>>> print('foo\\bar')
foo\bar
>>> print(R'foo\\bar')
foo\\bar

トリプルクォート文字列

Pythonには文字列を区切るさらに別の方法があります。 三重引用符で囲まれた文字列は、3つの単一引用符または3つの二重引用符の一致グループによって区切られます。 エスケープシーケンスは、トリプルクォートで囲まれた文字列でも機能しますが、シングルクォート、ダブルクォート、改行をエスケープせずに含めることができます。 これにより、単一引用符と二重引用符の両方を含む文字列を作成する便利な方法が提供されます。

>>>

>>> print('''This string has a single (') and a double (") quote.''')
This string has a single (') and a double (") quote.

改行をエスケープせずに含めることができるため、これにより複数行の文字列も許可されます。

>>>

>>> print("""This is a
string that spans
across several lines""")
This is a
string that spans
across several lines

Pythonプログラム構造に関する今後のチュートリアルで、三重引用符で囲まれた文字列を使用して、説明的なコメントをPythonコードに追加する方法を説明します。

ブール型、ブールコンテキスト、および「真実性」

Python 3はブールデータ型を提供します。 ブール型のオブジェクトは、TrueまたはFalseの2つの値のいずれかを持つことができます。

>>>

>>> type(True)

>>> type(False)

今後のチュートリアルで説明するように、Pythonの式は、ブールコンテキストで評価されることがよくあります。つまり、真偽を表すと解釈されます。 ブールコンテキストでtrueである値は「真である」と呼ばれることがあり、ブールコンテキストでfalseである値は「偽である」と呼ばれます。 (「偽」と綴られた「偽」も表示される場合があります。)

ブール型のオブジェクトの「真実性」は自明です。Trueに等しいブールオブジェクトは真実(true)であり、Falseに等しいオブジェクトは偽(false)です。 ただし、非ブールオブジェクトはブールコンテキストでも評価され、trueまたはfalseであると判断されます。

Pythonの演算子と式に関する今後のチュートリアルで論理演算子に出会うと、ブールコンテキストでのオブジェクトの評価の詳細がわかります。

組み込み関数

Pythonインタープリターは、組み込みの多くの関数をサポートします:68、Python 3.6の時点で。 これらの多くは、前後の文脈で取り上げられるため、以下の説明で取り上げます。

とりあえず、利用可能なものの感触を示すために、簡単な概要を説明します。 詳細については、Python documentation on built-in functionsを参照してください。 以下の説明の多くは、今後のチュートリアルで説明するトピックと概念を参照しています。

Math

関数 説明

abs()

数値の絶対値を返します

divmod()

商と整数除算の余りを返します

max()

指定された引数またはアイテムの最大のものを反復可能で返します

min()

指定された引数またはアイテムの最小のものを反復可能で返します

pow()

数を累乗する

round()

浮動小数点値を丸めます

sum()

反復可能なアイテムを合計します

型変換

関数 説明

ascii()

オブジェクトの印刷可能な表現を含む文字列を返します

bin()

整数を2進文字列に変換します

bool()

引数をブール値に変換します

chr()

整数引数で指定された文字の文字列表現を返します

complex()

引数から作成された複素数を返します

float()

数値または文字列から構築された浮動小数点オブジェクトを返します

hex()

整数を16進文字列に変換します

int()

数値または文字列から構築された整数オブジェクトを返します

oct()

整数を8進文字列に変換します

ord()

文字の整数表現を返します

repr()

オブジェクトの印刷可能な表現を含む文字列を返します

str()

オブジェクトの文字列バージョンを返します

type()

オブジェクトのタイプを返すか、新しいタイプのオブジェクトを作成します

イテラブルとイテレータ

関数 説明

all()

iterableのすべての要素がtrueの場合、Trueを返します

any()

iterableのいずれかの要素がtrueの場合、Trueを返します

enumerate()

iterableからのインデックスと値を含むタプルのリストを返します

filter()

反復可能な要素から要素をフィルタリングします

iter()

イテレータオブジェクトを返します

len()

オブジェクトの長さを返します

map()

iterableのすべてのアイテムに関数を適用します

next()

イテレータから次のアイテムを取得します

range()

整数値の範囲を生成します

reversed()

逆イテレータを返します

slice()

sliceオブジェクトを返します

sorted()

反復可能からソートされたリストを返します

zip()

イテレータから要素を集約するイテレータを作成します

複合データ型

関数 説明

bytearray()

bytearrayクラスのオブジェクトを作成して返します

bytes()

bytesオブジェクトを作成して返します(bytearrayに似ていますが、不変です)

dict()

dictオブジェクトを作成します

frozenset()

frozensetオブジェクトを作成します

list()

listオブジェクトを構築します

object()

新しい機能のないオブジェクトを返します

set()

setオブジェクトを作成します

tuple()

tupleオブジェクトを作成します

クラス、属性、および継承

関数 説明

classmethod()

関数のクラスメソッドを返します

delattr()

オブジェクトから属性を削除します

getattr()

オブジェクトの名前付き属性の値を返します

hasattr()

オブジェクトに特定の属性がある場合、Trueを返します

isinstance()

オブジェクトが特定のクラスのインスタンスであるかどうかを判別します

issubclass()

クラスが特定のクラスのサブクラスであるかどうかを判別します

property()

クラスのプロパティ値を返します

setattr()

オブジェクトの名前付き属性の値を設定します

super()

メソッド呼び出しを親または兄弟クラスに委任するプロキシオブジェクトを返します

Input/Output

関数 説明

format()

値をフォーマットされた表現に変換します

input()

コンソールからの入力を読み取ります

open()

ファイルを開き、ファイルオブジェクトを返します

print()

テキストストリームまたはコンソールに印刷します

変数、参照、およびスコープ

関数 説明

dir()

現在のローカルスコープ内の名前のリストまたはオブジェクト属性のリストを返します

globals()

現在のグローバルシンボルテーブルを表す辞書を返します

id()

オブジェクトのIDを返します

locals()

現在のローカルシンボルテーブルを表すディクショナリを更新して返します

vars()

モジュール、クラス、またはオブジェクトの__dict__属性を返します

その他

関数 説明

callable()

オブジェクトが呼び出し可能と思われる場合はTrueを返します

compile()

ソースをコードまたはASTオブジェクトにコンパイルします

eval()

Python式を評価します

exec()

Pythonコードの動的実行を実装します

hash()

オブジェクトのハッシュ値を返します

help()

組み込みのヘルプシステムを呼び出します

memoryview()

メモリビューオブジェクトを返します

staticmethod()

関数の静的メソッドを返します

__import__()

importステートメントによって呼び出されます

結論

このチュートリアルでは、Pythonが提供する組み込みのdata typesfunctionsについて学習しました。

これまでに示した例では、定数値のみを操作および表示しています。 ほとんどのプログラムでは、通常、プログラムの実行に応じて価値が変化するオブジェクトを作成する必要があります。

次のチュートリアルに進んで、Pythonvariables.について学びます。

__ Take the Quiz:インタラクティブな「Pythonの基本データ型」クイズで知識をテストします。 完了すると、学習の進捗状況を経時的に追跡できるようにスコアを受け取ります。