5. 組み込み型—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/2.7/library/stdtypes
移動先:案内検索

5.5。 組み込み型

次のセクションでは、インタープリターに組み込まれている標準タイプについて説明します。

ノート

歴史的に(リリース2.2まで)、Pythonの組み込み型は、オブジェクト指向の継承の基礎として組み込み型を使用できなかったため、ユーザー定義型とは異なりました。 この制限はもう存在しません。


主要な組み込み型は、数値、シーケンス、マッピング、ファイル、クラス、インスタンス、および例外です。

一部の操作は、いくつかのオブジェクトタイプでサポートされています。 特に、実質的にすべてのオブジェクトを比較し、真理値をテストして、文字列に変換できます( repr()関数またはわずかに異なる str()関数を使用)。 後者の関数は、オブジェクトが print()関数によって書き込まれるときに暗黙的に使用されます。

5.1。 真理値テスト

if または while 条件で使用するため、または以下のブール演算のオペランドとして使用するために、任意のオブジェクトの真理値をテストできます。 次の値はfalseと見なされます。


  • None

  • False

  • 00L0.00jなど、任意の数値タイプのゼロ。

  • 空のシーケンス(()[]など)。

  • 空のマッピング({}など)。

  • ユーザー定義クラスのインスタンス。クラスが__nonzero__()または__len__()メソッドを定義している場合、そのメソッドが整数ゼロまたは boolFalseを返すとき。 1

他のすべての値はtrueと見なされるため、多くのタイプのオブジェクトは常にtrueです。

特に明記されていない限り、ブール結果を持つ演算および組み込み関数は、falseの場合は常に0またはFalseを返し、trueの場合は1またはTrueを返します。 (重要な例外:ブール演算orおよびandは、常にそれらのオペランドの1つを返します。)


5.2。 ブール演算— と 、 また 、 いいえ

これらは、優先度の昇順で並べられたブール演算です。

手術 結果 ノート
x or y x がfalseの場合、 y 、それ以外の場合、 x (1)
x and y x がfalseの場合、 x 、それ以外の場合 y (2)
not x x がfalseの場合、True、それ以外の場合False (3)

ノート:

  1. これは短絡演算子であるため、最初の引数がfalseの場合にのみ2番目の引数を評価します。
  2. これは短絡演算子であるため、最初の引数が真の場合にのみ2番目の引数を評価します。
  3. notは非ブール演算子よりも優先度が低いため、not a == bnot (a == b)として解釈され、a == not bは構文エラーです。


5.3。 比較

比較操作は、すべてのオブジェクトでサポートされています。 それらはすべて同じ優先順位を持っています(これはブール演算の優先順位よりも高いです)。 比較は任意に連鎖させることができます。 たとえば、x < y <= zx < y and y <= zと同等ですが、 y は1回だけ評価されます(ただし、どちらの場合も z はまったく評価されません。 x < yはfalseであることが判明しています)。

この表は、比較操作をまとめたものです。

手術 意味 ノート
< 厳密に
<= 以下
> 厳密により大きい
>= 以上
== 同等
!= 等しくない (1)
is オブジェクトID
is not 否定されたオブジェクトID

ノート:

  1. !=<>と書くこともできますが、これは下位互換性のためだけに保持されている廃止された使用法です。 新しいコードは常に!=を使用する必要があります。

異なる数値型と異なる文字列型を除いて、異なる型のオブジェクトは決して等しく比較されません。 このようなオブジェクトは、一貫して、ただし任意に順序付けられます(したがって、異種配列をソートすると、一貫した結果が得られます)。 さらに、一部のタイプ(たとえば、ファイルオブジェクト)は、そのタイプの2つのオブジェクトが等しくない場合の比較の縮退概念のみをサポートします。 繰り返しますが、そのようなオブジェクトは任意に、しかし一貫して順序付けられます。 <<=>、および>=演算子は、いずれかのオペランドが複素数の場合、TypeError例外を発生させます。

クラスの同一でないインスタンスは、クラスが__eq__()メソッドまたは__cmp__()メソッドを定義しない限り、通常、等しくないと比較されます。

クラスのインスタンスは、クラスが十分な豊富な比較メソッド(__lt__()__le__()、[ X209X] 、および__ge__())または__cmp__()メソッド。

同じ構文優先順位を持つさらに2つの操作、inおよびnot inは、シーケンスタイプ(以下)でのみサポートされます。


5.4。 数値型— int 、 浮く 、 長さ 、 繁雑

単純整数長整数浮動小数点数、および複素数の4つの異なる数値タイプがあります。 さらに、ブール値は単純な整数のサブタイプです。 プレーン整数(単に整数とも呼ばれます)は、Cでlongを使用して実装され、少なくとも32ビットの精度が得られます(sys.maxintは常に最大プレーン整数に設定されます)現在のプラットフォームの値。最小値は-sys.maxint - 1)です。 長整数の精度は無制限です。 浮動小数点数は通常、Cでdoubleを使用して実装されます。 プログラムが実行されているマシンの浮動小数点数の精度と内部表現に関する情報は、 sys.float_info で入手できます。 複素数には実数部と虚数部があり、それぞれが浮動小数点数です。 複素数 z からこれらのパーツを抽出するには、z.realおよびz.imagを使用します。 (標準ライブラリには、追加の数値型、有理数を保持する分数、およびユーザー定義可能な精度で浮動小数点数を保持する 10進数が含まれています。)

数値は、数値リテラルによって、または組み込みの関数と演算子の結果として作成されます。 装飾されていない整数リテラル(2進数、16進数、8進数を含む)は、それらが示す値が大きすぎて単純な整数として表現できない場合を除き、単純な整数を生成します。その場合、それらは長整数を生成します。 'L'または'l'サフィックスが付いた整数リテラルは長い整数を生成します(1lは11に非常に似ているため、'L'をお勧めします)。 小数点または指数記号を含む数値リテラルは、浮動小数点数を生成します。 'j'または'J'を数値リテラルに追加すると、虚数(実数部がゼロの複素数)が生成されます。これを整数または浮動小数点数に追加して、実数と虚数の複素数を取得できます。部品。

Pythonは混合算術を完全にサポートします。バイナリ算術演算子に異なる数値型のオペランドがある場合、「より狭い」型のオペランドは他のオペランドに拡張されます。ここで、プレーン整数は長整数よりも狭く、浮動小数点はよりも狭くなります。繁雑。 混合タイプの数の比較では、同じルールが使用されます。 2 コンストラクター int()long()float()、および complex()は次のことができます。特定のタイプの数値を生成するために使用されます。

すべての組み込み数値タイプは、次の操作をサポートします。 オペレーターの優先順位については、電力オペレーター以降のセクションを参照してください。

手術 結果 ノート
x + y xy の合計
x - y xy の違い
x * y xy の積
x / y xy の商 (1)
x // y (床) xy の商 (4)(5)
x % y x / yの残り (4)
-x x が否定されました
+x x 変更なし
abs(x) x の絶対値または大きさ (3)
int(x) x を整数に変換 (2)
long(x) x を長整数に変換 (2)
float(x) x を浮動小数点に変換 (6)
complex(re,im) 実数部 re 、虚数部 im の複素数。 im のデフォルトはゼロです。
c.conjugate() 複素数 c の共役。 (実数の同一性)
divmod(x, y) ペア(x // y, x % y) (3)(4)
pow(x, y) x の累乗 y (3)(7)
x ** y x の累乗 y (7)

ノート:

  1. (プレーンまたはロング)整数除算の場合、結果は整数になります。 結果は常にマイナスの無限大に向かって丸められます。1/ 2は0、(-1)/ 2は-1、1 /(-2)は-1、(-1)/(-2)は0です。 数値に関係なく、いずれかのオペランドが長整数の場合、結果は長整数になることに注意してください。

  2. int()または long()を使用した浮動小数点数からの変換は、関連する関数 math.trunc()のようにゼロに向かって切り捨てられます。 関数 math.floor()を使用して下向きに丸め、 math.ceil()を使用して上向きに丸めます。

  3. 詳細については、組み込み関数を参照してください。

  4. バージョン2.3以降非推奨:床分割演算子、モジュロ演算子、および divmod()関数は、複素数に対して定義されなくなりました。 代わりに、必要に応じて abs()関数を使用して浮動小数点数に変換してください。

  5. 整数除算とも呼ばれます。 結果の型は必ずしもintではありませんが、結果の値は整数です。

  6. floatは、文字列「nan」と「inf」を受け入れます。オプションのプレフィックス「+」または「-」は、Not a Number(NaN)および正または負の無限大を表します。

    バージョン2.6の新機能。

  7. Pythonは、プログラミング言語で一般的なように、pow(0, 0)0 ** 01と定義しています。

すべての numbers.Real タイプ( intlong 、および float )には、次の操作も含まれています。

手術 結果
math.trunc(x) xIntegral に切り捨てられます
round(x[, n]) xn 桁に丸められ、ゼロから離れる方向に丸められます。 n を省略すると、デフォルトで0になります。
math.floor(x) 浮動小数点としての最大の整数<= NS
math.ceil(x) 浮動小数点としての最小整数> = x

5.4.1。 整数型のビット演算

ビット演算は整数に対してのみ意味があります。 負の数は2の補数として扱われます(これは、操作中にオーバーフローが発生しないように十分な数のビットを想定しています)。

バイナリビット演算の優先順位はすべて数値演算よりも低く、比較よりも高くなっています。 単項演算~は、他の単項数値演算(+および-)と同じ優先順位を持ちます。

次の表に、優先度の昇順でソートされたビット演算を示します。

手術 結果 ノート
y x および y のビット単位のまたは
x ^ y xy のビット単位の排他的論理和
x & y x および y のビット単位のおよび
x << n xn ビットだけ左にシフト (1)(2)
x >> n xn ビットだけ右にシフト (1)(3)
~x x のビットが反転しました

ノート:

  1. 負のシフトカウントは違法であり、ValueErrorが発生します。
  2. n ビットによる左シフトは、pow(2, n)による乗算と同等です。 結果が単純な整数の範囲を超えると、長整数が返されます。
  3. n ビットによる右シフトは、pow(2, n)による除算と同等です。


5.4.2。 整数型に関する追加のメソッド

整数型は numbers.Integral abstract基本クラスを実装します。 さらに、それらはもう1つの方法を提供します。

int.bit_length()
long.bit_length()

符号と先行ゼロを除いて、整数を2進数で表すために必要なビット数を返します。

>>> n = -37
>>> bin(n)
'-0b100101'
>>> n.bit_length()
6

より正確には、xがゼロ以外の場合、x.bit_length()2**(k-1) <= abs(x) < 2**kのような一意の正の整数kです。 同様に、abs(x)が十分に小さく、対数が正しく丸められている場合は、k = 1 + int(log(abs(x), 2))になります。 xがゼロの場合、x.bit_length()0を返します。

に相当:

def bit_length(self):
    s = bin(self)       # binary representation:  bin(-37) --> '-0b100101'
    s = s.lstrip('-0b') # remove leading zeros and minus sign
    return len(s)       # len('100101') --> 6

バージョン2.7の新機能。


5.4.3。 フロートの追加メソッド

float型は、 numbers.Real abstract基本クラスを実装します。 floatには、次の追加メソッドもあります。

float.as_integer_ratio()

比率が元のfloatと正確に等しく、正の分母を持つ整数のペアを返します。 無限大でOverflowErrorを上げ、NaNでValueErrorを上げます。

バージョン2.6の新機能。

float.is_integer()

floatインスタンスが整数値で有限の場合はTrueを返し、それ以外の場合はFalseを返します。

>>> (-2.0).is_integer()
True
>>> (3.2).is_integer()
False

バージョン2.6の新機能。

2つの方法は、16進文字列との間の変換をサポートします。 Pythonのfloatは内部で2進数として格納されるため、floatを 10進数文字列に変換したり、 10進数文字列から変換したりすると、通常、小さな丸め誤差が発生します。 対照的に、16進文字列では、浮動小数点数の正確な表現と指定が可能です。 これは、デバッグ時や数値作業で役立ちます。

float.hex()

浮動小数点数の表現を16進文字列として返します。 有限浮動小数点数の場合、この表現には常に先頭の0xと末尾のpおよび指数が含まれます。

バージョン2.6の新機能。

float.fromhex(s)

16進文字列 s で表されるfloatを返すクラスメソッド。 文字列 s には、先頭と末尾に空白が含まれる場合があります。

バージョン2.6の新機能。

float.hex()はインスタンスメソッドであり、 float.fromhex()はクラスメソッドであることに注意してください。

16進文字列は次の形式を取ります。

[sign] ['0x'] integer ['.' fraction] ['p' exponent]

ここで、オプションのsignは、+または-のいずれかで、integerおよびfractionは16進数の文字列であり、 [ X134X]は、オプションの先行記号が付いた10進整数です。 大文字と小文字は区別されません。整数または分数のいずれかに少なくとも1桁の16進数が必要です。 この構文は、C99標準のセクション6.4.4.2で指定されている構文、およびJava1.5以降で使用されている構文に似ています。 特に、 float.hex()の出力は、CまたはJavaコードの16進浮動小数点リテラル、およびCの%a形式の文字またはJavaの[X196X ] は、 float.fromhex()によって受け入れられます。

指数は16進数ではなく10進数で記述されており、係数を乗算する2の累乗を与えることに注意してください。 たとえば、16進文字列0x3.a7p10は、浮動小数点数(3 + 10./16 + 7./16**2) * 2.0**10または3740.0を表します。

>>> float.fromhex('0x3.a7p10')
3740.0

3740.0に逆変換を適用すると、同じ数値を表す別の16進文字列が得られます。

>>> float.hex(3740.0)
'0x1.d380000000000p+11'

5.5。 イテレータタイプ

バージョン2.2の新機能。


Pythonは、コンテナーに対する反復の概念をサポートしています。 これは、2つの異なる方法を使用して実装されます。 これらは、ユーザー定義クラスが反復をサポートできるようにするために使用されます。 以下でより詳細に説明するシーケンスは、常に反復法をサポートします。

反復サポートを提供するには、コンテナオブジェクトに対して1つのメソッドを定義する必要があります。

container.__iter__()
イテレータオブジェクトを返します。 オブジェクトは、以下で説明するイテレータプロトコルをサポートする必要があります。 コンテナーがさまざまなタイプの反復をサポートしている場合は、それらの反復タイプの反復子を具体的に要求するための追加のメソッドを提供できます。 (複数の形式の反復をサポートするオブジェクトの例は、幅優先探索と深さ優先探索の両方をサポートするツリー構造です。)このメソッドは、Pythonオブジェクトの型構造の tp_iter スロットに対応します。 Python / CAPI。

イテレータオブジェクト自体は、イテレータプロトコルを形成する次の2つのメソッドをサポートする必要があります。

iterator.__iter__()
イテレータオブジェクト自体を返します。 これは、コンテナとイテレータの両方を for および in ステートメントで使用できるようにするために必要です。 このメソッドは、Python / CAPIのPythonオブジェクトの型構造の tp_iter スロットに対応します。
iterator.next()
コンテナから次のアイテムを返します。 それ以上アイテムがない場合は、StopIteration例外を発生させます。 このメソッドは、Python / CAPIのPythonオブジェクトの型構造の tp_iternext スロットに対応します。

Pythonは、一般的および特定のシーケンスタイプ、ディクショナリ、およびその他のより特殊な形式での反復をサポートするために、いくつかのイテレータオブジェクトを定義しています。 特定のタイプは、イテレータプロトコルの実装以外には重要ではありません。

このプロトコルの目的は、イテレータの next()メソッドがStopIterationを発生させると、それ以降の呼び出しでも発生し続けることです。 このプロパティに従わない実装は、壊れていると見なされます。 (この制約はPython 2.3で追加されました。Python2.2では、このルールに従ってさまざまなイテレーターが壊れています。)

5.5.1。 発電機の種類

Pythonの generator は、イテレータプロトコルを実装するための便利な方法を提供します。 コンテナオブジェクトの__iter__()メソッドがジェネレータとして実装されている場合、 __ iter __()および next()[を提供するイテレータオブジェクト(技術的にはジェネレータオブジェクト)を自動的に返します。 X202X]メソッド。 ジェネレーターの詳細については、 yield式のドキュメントを参照してください。


5.6。 シーケンスタイプ— str 、 ユニコード 、list 、 タプル 、 bytearray 、 バッファ 、 xrange

シーケンスタイプには、文字列、Unicode文字列、リスト、タプル、バイト配列、バッファ、およびxrangeオブジェクトの7つがあります。

その他のコンテナについては、組み込みの dict クラスと set クラス、および collections モジュールを参照してください。

文字列リテラルは一重引用符または二重引用符で記述されます:'xyzzy'"frobozz"。 文字列リテラルの詳細については、文字列リテラルを参照してください。 Unicode文字列は文字列によく似ていますが、構文で先行する'u'文字u'abc'u"def"を使用して指定されます。 ここで説明する機能に加えて、文字列メソッドセクションで説明されている文字列固有のメソッドもあります。 リストは角かっこで構成され、項目をコンマで区切ります:[a, b, c]。 タプルは、囲み括弧の有無にかかわらず、コンマ演算子(角括弧内ではない)によって作成されますが、空のタプルには、a, b, c()などの囲み括弧が必要です。 単一アイテムのタプルには、(d,)のように末尾にコンマが必要です。

Bytearrayオブジェクトは、組み込み関数 bytearray()を使用して作成されます。

バッファオブジェクトはPython構文では直接サポートされていませんが、組み込み関数 buffer()を呼び出すことで作成できます。 連結や繰り返しはサポートしていません。

xrange型のオブジェクトは、それらを作成するための特定の構文がないという点でバッファーに似ていますが、 xrange()関数を使用して作成されます。 それらはスライス、連結、または繰り返しをサポートしておらず、innot inmin()、または max()を使用するのは非効率的です。

ほとんどのシーケンスタイプは、次の操作をサポートしています。 inおよびnot in操作は、比較操作と同じ優先順位を持っています。 +および*演算は、対応する数値演算と同じ優先順位を持ちます。 3 Mutable Sequence Types 用に追加のメソッドが提供されています。

この表は、優先順位の昇順でソートされたシーケンス操作を示しています。 表では、 st は同じタイプのシーケンスです。 ni 、および j は整数です。

手術 結果 ノート
x in s True s のアイテムが x と等しい場合、それ以外の場合はFalse (1)
x not in s False s のアイテムが x と等しい場合、それ以外の場合はTrue (1)
s + t st の連結 (6)
s * n, n * s s をそれ自体に n 回追加するのと同じです (2)
s[i] i 番目のアイテム、原点0 (3)
s[i:j] si から j へのスライス (3)(4)
s[i:j:k] ステップ ksi から j にスライスします。 (3)(5)
len(s) の長さ
min(s) の最小アイテム
max(s) の最大のアイテム
s.index(x) s で最初に出現する x のインデックス
s.count(x) s での x の合計発生数

シーケンスタイプは比較もサポートします。 特に、タプルとリストは、対応する要素を比較することによって辞書式に比較されます。 つまり、等しいと比較するには、すべての要素が等しく比較され、2つのシーケンスが同じタイプで同じ長さである必要があります。 (詳細については、言語リファレンスの比較を参照してください。)

ノート:

  1. s が文字列またはUnicode文字列オブジェクトの場合、inおよびnot in操作はサブストリングテストのように機能します。 2.3より前のPythonバージョンでは、 x は長さ1の文字列である必要がありました。 Python 2.3以降では、 x は任意の長さの文字列にすることができます。

  2. n の値が0より小さい場合は、0として扱われます( s と同じタイプの空のシーケンスが生成されます)。 s のシーケンスのアイテムはコピーされないことに注意してください。 それらは複数回参照されます。 これはしばしば新しいPythonプログラマーを悩ませます。 検討:

    >>> lists = [[../]] * 3
    >>> lists
    [[], [], []]
    >>> lists[0].append(3)
    >>> lists
    [[3], [3], [3]]

    何が起こったのかというと、Python/docs/2.7/libraryは空のリストを含む1要素のリストであるため、Python/docs/2.7/library * 3の3つの要素はすべてこの単一の空のリストへの参照です。 listsの要素のいずれかを変更すると、この単一のリストが変更されます。 次の方法で、さまざまなリストのリストを作成できます。

    >>> lists = [[] for i in range(3)]
    >>> lists[0].append(3)
    >>> lists[1].append(5)
    >>> lists[2].append(7)
    >>> lists
    [[3], [5], [7]]

    詳細な説明は、FAQエントリ多次元リストを作成するにはどうすればよいですか?にあります。

  3. i または j が負の場合、インデックスはシーケンス s の終わりを基準にしています:len(s) + iまたはlen(s) + jは代用。 ただし、-00のままであることに注意してください。

  4. i から j までの s のスライスは、i <= k < jのようなインデックス k を持つアイテムのシーケンスとして定義されます。 。 i または jlen(s)より大きい場合は、len(s)を使用します。 i を省略した場合、またはNoneの場合は、0を使用してください。 j を省略した場合、またはNoneの場合は、len(s)を使用してください。 ij 以上の場合、スライスは空です。

  5. ステップ k での i から j への s のスライスは、インデックスx = i + n*kを持つアイテムのシーケンスとして定義されます。 0 <= n < (j-i)/kのように。 つまり、インデックスはii+ki+2*ki+3*kなどであり、 j に達すると停止します(ただし、 j )は含めないでください。 k が正の場合、 ij は、大きい場合はlen(s)に縮小されます。 k が負の場合、 ij が大きい場合はlen(s) - 1に減少します。 i または j を省略した場合、またはNoneの場合、これらは「終了」値になります(終了は k の符号によって異なります)。 k をゼロにすることはできないことに注意してください。 kNoneの場合、1のように扱われます。

  6. バージョン2.4で変更:以前は、文字列の連結がインプレースで発生することはありませんでした。

5.6.1。 文字列メソッド

以下に、8ビット文字列とUnicodeオブジェクトの両方がサポートする文字列メソッドを示します。 それらのいくつかは、 bytearray オブジェクトでも使用できます。

さらに、Pythonの文字列は、シーケンスタイプ— str、unicode、list、tuple、bytearray、buffer、xrange セクションで説明されているシーケンスタイプメソッドをサポートします。 フォーマットされた文字列を出力するには、テンプレート文字列、または文字列フォーマット操作セクションで説明されている%演算子を使用します。 また、正規表現に基づく文字列関数については、 re モジュールを参照してください。

str.capitalize()

最初の文字を大文字にし、残りを小文字にした文字列のコピーを返します。

8ビット文字列の場合、このメソッドはロケールに依存します。

str.center(width[, fillchar])

長さの文字列の中央に戻ります。 パディングは、指定された fillchar (デフォルトはスペース)を使用して行われます。

バージョン2.4で変更: fillchar 引数のサポート。

str.count(sub[, start[, end]])
[ startend ]の範囲内の部分文字列 sub の重複しない出現回数を返します。 オプションの引数 start および end は、スライス表記のように解釈されます。
str.decode([encoding[, errors]])

encoding に登録されているコーデックを使用して文字列をデコードします。 encoding は、デフォルトでデフォルトの文字列エンコーディングになります。 エラーは、別のエラー処理スキームを設定するために指定される場合があります。 デフォルトは'strict'です。これは、エンコードエラーによってUnicodeErrorが発生することを意味します。 その他の可能な値は、'ignore''replace'、および codecs.register_error()を介して登録されたその他の名前です。セクションコーデック基本クラスを参照してください。

バージョン2.2の新機能。

バージョン2.3で変更:他のエラー処理スキームのサポートが追加されました。

バージョン2.7で変更:キーワード引数のサポートが追加されました。

str.encode([encoding[, errors]])

文字列のエンコードされたバージョンを返します。 デフォルトのエンコーディングは、現在のデフォルトの文字列エンコーディングです。 エラーは、別のエラー処理スキームを設定するために指定される場合があります。 エラーのデフォルトは'strict'です。これは、エンコードエラーによってUnicodeErrorが発生することを意味します。 その他の可能な値は、'ignore''replace''xmlcharrefreplace''backslashreplace'、および codecs.register_error()を介して登録されたその他の名前です。を参照してください。セクションコーデック基本クラス。 可能なエンコーディングのリストについては、セクション標準エンコーディングを参照してください。

バージョン2.0の新機能。

バージョン2.3で変更: 'xmlcharrefreplace'および'backslashreplace'のサポート、およびその他のエラー処理スキームが追加されました。

バージョン2.7で変更:キーワード引数のサポートが追加されました。

str.endswith(suffix[, start[, end]])

文字列が指定されたサフィックスで終わる場合は、Trueを返します。それ以外の場合は、Falseを返します。 サフィックスは、検索するサフィックスのタプルにすることもできます。 オプションの start を使用して、その位置からテストを開始します。 オプションの end を使用して、その位置での比較を停止します。

バージョン2.5で変更:タプルをサフィックスとして受け入れます。

str.expandtabs([tabsize])

現在の列と指定されたタブサイズに応じて、すべてのタブ文字が1つ以上のスペースに置き換えられた文字列のコピーを返します。 タブ位置は tabsize 文字ごとに発生します(デフォルトは8で、列0、8、16などにタブ位置があります)。 文字列を展開するには、現在の列をゼロに設定し、文字列を1文字ずつ調べます。 文字がタブ(\t)の場合、現在の列が次のタブ位置と等しくなるまで、1つ以上のスペース文字が結果に挿入されます。 (タブ文字自体はコピーされません。)文字が改行(\n)または戻り文字(\r)の場合、コピーされ、現在の列はゼロにリセットされます。 他の文字は変更されずにコピーされ、印刷時の文字の表現方法に関係なく、現在の列が1つインクリメントされます。

>>> '01\t012\t0123\t01234'.expandtabs()
'01      012     0123    01234'
>>> '01\t012\t0123\t01234'.expandtabs(4)
'01  012 0123    01234'
str.find(sub[, start[, end]])

スライスs[start:end]内でサブ文字列 sub が見つかった文字列の最小のインデックスを返します。 オプションの引数 start および end は、スライス表記のように解釈されます。 sub が見つからない場合は、-1を返します。

ノート

find()メソッドは、 sub の位置を知る必要がある場合にのみ使用してください。 sub が部分文字列であるかどうかを確認するには、 in 演算子を使用します。

>>> 'Py' in 'Python'
True
str.format(*args, **kwargs)

文字列フォーマット操作を実行します。 このメソッドが呼び出される文字列には、中括弧{}で区切られたリテラルテキストまたは置換フィールドを含めることができます。 各置換フィールドには、位置引数の数値インデックスまたはキーワード引数の名前のいずれかが含まれます。 各置換フィールドが対応する引数の文字列値で置き換えられた文字列のコピーを返します。

>>> "The sum of 1 + 2 is {0}".format(1+2)
'The sum of 1 + 2 is 3'

フォーマット文字列で指定できるさまざまなフォーマットオプションの説明については、フォーマット文字列構文を参照してください。

この文字列フォーマットの方法はPython3の新しい標準であり、新しいコードの文字列フォーマット操作で説明されている%フォーマットよりも優先されます。

バージョン2.6の新機能。

str.index(sub[, start[, end]])
find()と同様ですが、部分文字列が見つからない場合はValueErrorを上げます。
str.isalnum()

文字列内のすべての文字が英数字であり、少なくとも1文字ある場合はtrueを返し、それ以外の場合はfalseを返します。

8ビット文字列の場合、このメソッドはロケールに依存します。

str.isalpha()

文字列内のすべての文字がアルファベットで、少なくとも1文字ある場合はtrueを返し、それ以外の場合はfalseを返します。

8ビット文字列の場合、このメソッドはロケールに依存します。

str.isdigit()

文字列内のすべての文字が数字であり、少なくとも1文字ある場合はtrueを返し、それ以外の場合はfalseを返します。

8ビット文字列の場合、このメソッドはロケールに依存します。

str.islower()

文字列内のすべての大文字 4 が小文字で、大文字が少なくとも1つある場合はtrueを返し、それ以外の場合はfalseを返します。

8ビット文字列の場合、このメソッドはロケールに依存します。

str.isspace()

文字列に空白文字のみがあり、少なくとも1文字ある場合はtrueを返し、それ以外の場合はfalseを返します。

8ビット文字列の場合、このメソッドはロケールに依存します。

str.istitle()

文字列が大文字の文字列であり、少なくとも1つの文字がある場合、trueを返します。たとえば、大文字は大文字以外の文字のみに続き、小文字は大文字のみの文字に続く場合があります。 それ以外の場合はfalseを返します。

8ビット文字列の場合、このメソッドはロケールに依存します。

str.isupper()

文字列内のすべての大文字 4 が大文字で、大文字が少なくとも1つある場合はtrueを返し、それ以外の場合はfalseを返します。

8ビット文字列の場合、このメソッドはロケールに依存します。

str.join(iterable)
iterable の文字列を連結した文字列を返します。 iterable にUnicodeオブジェクトがある場合は、代わりにUnicodeを返します。 iterable に文字列以外またはUnicode以外のオブジェクト値がある場合、TypeErrorが発生します。 要素間の区切り文字は、このメソッドを提供する文字列です。
str.ljust(width[, fillchar])

長さの文字列で左寄せされた文字列を返します。 パディングは、指定された fillchar (デフォルトはスペース)を使用して行われます。 widthlen(s)以下の場合、元の文字列が返されます。

バージョン2.4で変更: fillchar 引数のサポート。

str.lower()

大文字と小文字がすべて 4 が小文字に変換された文字列のコピーを返します。

8ビット文字列の場合、このメソッドはロケールに依存します。

str.lstrip([chars])

先頭の文字が削除された文字列のコピーを返します。 chars 引数は、削除する文字のセットを指定する文字列です。 省略またはNoneの場合、 chars 引数はデフォルトで空白を削除します。 chars 引数はプレフィックスではありません。 むしろ、その値のすべての組み合わせが削除されます。

>>> '   spacious   '.lstrip()
'spacious   '
>>> 'www.example.com'.lstrip('cmowz.')
'example.com'

バージョン2.2.2で変更: chars 引数のサポート。

str.partition(sep)

sep の最初の出現時に文字列を分割し、セパレーターの前の部分、セパレーター自体、およびセパレーターの後の部分を含む3タプルを返します。 セパレータが見つからない場合は、文字列自体を含む3タプルを返し、その後に2つの空の文字列が続きます。

バージョン2.5の新機能。

str.replace(old, new[, count])
すべての部分文字列 oldnew に置き換えられた文字列のコピーを返します。 オプションの引数 count を指定すると、最初の count オカレンスのみが置き換えられます。
str.rfind(sub[, start[, end]])
subs[start:end]内に含まれるように、サブ文字列 sub が見つかった文字列の最高のインデックスを返します。 オプションの引数 start および end は、スライス表記のように解釈されます。 失敗した場合は-1を返します。
str.rindex(sub[, start[, end]])
rfind()と同様ですが、サブストリング sub が見つからない場合にValueErrorを発生させます。
str.rjust(width[, fillchar])

長さの文字列で右寄せされた文字列を返します。 パディングは、指定された fillchar (デフォルトはスペース)を使用して行われます。 widthlen(s)以下の場合、元の文字列が返されます。

バージョン2.4で変更: fillchar 引数のサポート。

str.rpartition(sep)

sep の最後のオカレンスで文字列を分割し、セパレーターの前の部分、セパレーター自体、およびセパレーターの後の部分を含む3タプルを返します。 セパレータが見つからない場合は、2つの空の文字列を含む3タプルを返し、その後に文字列自体を返します。

バージョン2.5の新機能。

str.rsplit([sep[, maxsplit]])

sep を区切り文字列として使用して、文字列内の単語のリストを返します。 maxsplit が指定されている場合、最大で maxsplit 分割が実行され、右端分割が実行されます。 sep が指定されていないかNoneの場合、空白文字列は区切り文字になります。 右から分割することを除いて、 rsplit()split()のように動作します。これについては以下で詳しく説明します。

バージョン2.4の新機能。

str.rstrip([chars])

末尾の文字が削除された文字列のコピーを返します。 chars 引数は、削除する文字のセットを指定する文字列です。 省略またはNoneの場合、 chars 引数はデフォルトで空白を削除します。 chars 引数はサフィックスではありません。 むしろ、その値のすべての組み合わせが削除されます。

>>> '   spacious   '.rstrip()
'   spacious'
>>> 'mississippi'.rstrip('ipz')
'mississ'

バージョン2.2.2で変更: chars 引数のサポート。

str.split([sep[, maxsplit]])

sep を区切り文字列として使用して、文字列内の単語のリストを返します。 maxsplit が指定されている場合、最大で maxsplit の分割が実行されます(したがって、リストには最大でmaxsplit+1要素が含まれます)。 maxsplit が指定されていないか-1の場合、分割数に制限はありません(可能なすべての分割が行われます)。

sep が指定されている場合、連続する区切り文字はグループ化されず、空の文字列を区切ると見なされます(たとえば、'1,,2'.split(',')['1', , '2']を返します)。 sep 引数は、複数の文字で構成されている場合があります(たとえば、'1<>2<>3'.split('<>')['1', '2', '3']を返します)。 空の文字列を指定された区切り文字で分割すると、[]が返されます。

sep が指定されていないか、Noneの場合、異なる分割アルゴリズムが適用されます。連続する空白の実行は単一の区切り文字と見なされ、結果には先頭に空の文字列が含まれません。文字列に先頭または末尾の空白がある場合は終了します。 したがって、空の文字列または空白だけで構成される文字列をNone区切り文字で分割すると、[]が返されます。

たとえば、' 1  2   3  '.split()['1', '2', '3']を返し、'  1  2   3  '.split(None, 1)['1', '2   3  ']を返します。

str.splitlines([keepends])

文字列内の行のリストを返し、行の境界で区切ります。 この方法では、ユニバーサルニューラインアプローチを使用してラインを分割します。 keepends が指定され、trueでない限り、改行は結果のリストに含まれません。

Pythonは、"\r""\n"、および"\r\n"を8ビット文字列の行境界として認識します。

例えば:

>>> 'ab c\n\nde fg\rkl\r\n'.splitlines()
['ab c', '', 'de fg', 'kl']
>>> 'ab c\n\nde fg\rkl\r\n'.splitlines(True)
['ab c\n', '\n', 'de fg\r', 'kl\r\n']

区切り文字列 sep が指定された場合の split()とは異なり、このメソッドは空の文字列に対して空のリストを返し、終端の改行によって余分な行が生成されることはありません。

>>> "".splitlines()
[]
>>> "One line\n".splitlines()
['One line']

比較のために、split('\n')は次のようになります。

>>> ''.split('\n')
['']
>>> 'Two lines\n'.split('\n')
['Two lines', '']
unicode.splitlines([keepends])

str.splitlines()のように、文字列内の行のリストを返します。 ただし、Unicodeメソッドは、8ビット文字列で認識されるユニバーサルニューラインのスーパーセットである次の行境界で分割されます。

表現

説明

\n

改行

\r

キャリッジリターン

\r\n

キャリッジリターン+ラインフィード

\vまたは\x0b

ライン集計

\fまたは\x0c

フォームフィード

\x1c

ファイル区切り文字

\x1d

グループ区切り文字

\x1e

レコード区切り文字

\x85

次の行(C1制御コード)

\u2028

ラインセパレーター

\u2029

段落区切り文字

バージョン2.7で変更: \vおよび\fが行境界のリストに追加されました。

str.startswith(prefix[, start[, end]])

文字列がプレフィックスで始まる場合はTrueを返し、そうでない場合はFalseを返します。 prefix は、検索するプレフィックスのタプルにすることもできます。 オプションの start を使用して、その位置から始まる文字列をテストします。 オプションの end を使用して、その位置で文字列の比較を停止します。

バージョン2.5で変更:タプルをプレフィックスとして受け入れます。

str.strip([chars])

先頭と末尾の文字が削除された文字列のコピーを返します。 chars 引数は、削除する文字のセットを指定する文字列です。 省略またはNoneの場合、 chars 引数はデフォルトで空白を削除します。 chars 引数は接頭辞または接尾辞ではありません。 むしろ、その値のすべての組み合わせが削除されます。

>>> '   spacious   '.strip()
'spacious'
>>> 'www.example.com'.strip('cmowz.')
'example'

バージョン2.2.2で変更: chars 引数のサポート。

str.swapcase()

大文字を小文字に、またはその逆に変換した文字列のコピーを返します。

8ビット文字列の場合、このメソッドはロケールに依存します。

str.title()

単語が大文字で始まり、残りの文字が小文字である文字列の大文字のバージョンを返します。

アルゴリズムは、連続する文字のグループとして単語の単純な言語に依存しない定義を使用します。 この定義は多くの文脈で機能しますが、縮約と所有格のアポストロフィが単語の境界を形成することを意味します。これは望ましい結果ではない可能性があります。

>>> "they're bill's friends from the UK".title()
"They'Re Bill'S Friends From The Uk"

アポストロフィの回避策は、正規表現を使用して作成できます。

>>> import re
>>> def titlecase(s):
...     return re.sub(r"[A-Za-z]+('[A-Za-z]+)?",
...                   lambda mo: mo.group(0)[0].upper() +
...                              mo.group(0)[1:].lower(),
...                   s)
...
>>> titlecase("they're bill's friends.")
"They're Bill's Friends."

8ビット文字列の場合、このメソッドはロケールに依存します。

str.translate(table[, deletechars])

オプションの引数 deletechars で発生するすべての文字が削除され、残りの文字が指定された変換テーブルを介してマップされた文字列のコピーを返します。これは長さ256の文字列である必要があります。

string モジュールの maketrans()ヘルパー関数を使用して、変換テーブルを作成できます。 文字列オブジェクトの場合、文字のみを削除する翻訳の場合は、 table 引数をNoneに設定します。

>>> 'read this short text'.translate(None, 'aeiou')
'rd ths shrt txt'

バージョン2.6の新機能: None table 引数のサポート。

Unicodeオブジェクトの場合、 translate()メソッドはオプションの deletechars 引数を受け入れません。 代わりに、 s のコピーを返します。ここで、すべての文字は、Unicode序数からUnicode序数、Unicode文字列、またはNoneへのマッピングである必要がある指定された変換テーブルを介してマッピングされています。 マップされていない文字はそのまま残されます。 Noneにマップされている文字は削除されます。 より柔軟なアプローチは、 codecs モジュールを使用してカスタム文字マッピングコーデックを作成することです(例については、encodings.cp1251を参照)。

str.upper()

大文字と小文字がすべて 4 に変換された文字列のコピーを返します。 sに大文字と小文字が区別されない文字が含まれている場合、または結果の文字のUnicodeカテゴリが「Lu」(文字、大文字)ではなく、例えば 「lt」(レター、タイトルケース)。

8ビット文字列の場合、このメソッドはロケールに依存します。

str.zfill(width)

長さの文字列で、ゼロで埋められたままの数値文字列を返します。 符号プレフィックスは正しく処理されます。 widthlen(s)以下の場合、元の文字列が返されます。

バージョン2.2.2の新機能。

次のメソッドは、Unicodeオブジェクトにのみ存在します。

unicode.isnumeric()
Sに数字しかない場合はTrueを返し、それ以外の場合はFalseを返します。 数字には、数字、およびUnicode数値プロパティを持つすべての文字が含まれます。 U + 2155、VULGAR FRACTION1 / 5。
unicode.isdecimal()
Sに10進文字しかない場合はTrueを返し、それ以外の場合はFalseを返します。 10進文字には、数字、および10進基数を形成するために使用できるすべての文字が含まれます。 U + 0660、アラビア語-INDIC DIGITZERO。


5.6.2。 文字列フォーマット操作

文字列オブジェクトとUnicodeオブジェクトには、%演算子(モジュロ)という1つの固有の組み込み演算があります。 これは、文字列 formating または interpolation 演算子とも呼ばれます。 format % valuesformat は文字列またはUnicodeオブジェクト)を指定すると、 format%変換仕様は、の0個以上の要素に置き換えられます。 ]値。 効果は、C言語でsprintf()を使用する場合と同様です。 format がUnicodeオブジェクトである場合、または%s変換を使用して変換されるオブジェクトのいずれかがUnicodeオブジェクトである場合、結果もUnicodeオブジェクトになります。

format が単一の引数を必要とする場合、 values は単一の非タプルオブジェクトである可能性があります。 5 それ以外の場合、 values は、フォーマット文字列で指定された正確な数のアイテムを持つタプル、または単一のマッピングオブジェクト(辞書など)である必要があります。

変換指定子には2つ以上の文字が含まれ、次のコンポーネントがあります。これらはこの順序で発生する必要があります。

  1. 指定子の開始を示す'%'文字。
  2. 括弧で囲まれた文字シーケンス((somename)など)で構成されるマッピングキー(オプション)。
  3. 一部の変換タイプの結果に影響を与える変換フラグ(オプション)。
  4. 最小フィールド幅(オプション)。 '*'(アスタリスク)として指定されている場合、実際の幅は values のタプルの次の要素から読み取られ、変換するオブジェクトは最小フィールド幅とオプションの精度の後になります。
  5. 精度(オプション)。'.'(ドット)の後に精度が続きます。 '*'(アスタリスク)として指定されている場合、実際の幅は values のタプルの次の要素から読み取られ、変換する値は精度の後になります。
  6. 長さ修飾子(オプション)。
  7. 変換タイプ。

右の引数が辞書(または他のマッピングタイプ)の場合、文字列 must の形式には、'%'文字の直後に挿入される辞書に括弧で囲まれたマッピングキーが含まれている必要があります。 マッピングキーは、マッピングからフォーマットする値を選択します。 例えば:

>>> print '%(language)s has %(number)03d quote types.' % \
...       {"language": "Python", "number": 2}
Python has 002 quote types.

この場合、*指定子をフォーマットで使用することはできません(順次パラメーターリストが必要なため)。

変換フラグの文字は次のとおりです。

国旗 意味
'#' 値の変換では、「代替形式」(以下で定義)が使用されます。
'0' 変換は、数値に対してゼロが埋め込まれます。
'-' 変換された値は調整されたままになります(両方が指定されている場合、'0'変換をオーバーライドします)。
' ' (スペース)符号付き変換によって生成される正の数(または空の文字列)の前に空白を残す必要があります。
'+' 符号文字('+'または'-')が変換の前に配置されます(「スペース」フラグをオーバーライドします)。

長さ修飾子(hl、またはL)が存在する場合がありますが、Pythonには必要ないため、無視されます。 %ld%dと同じです。

変換タイプは次のとおりです。

会話 意味 ノート
'd' 符号付き整数10進数。
'i' 符号付き整数10進数。
'o' 符号付き8進値。 (1)
'u' 廃止されたタイプ– 'd'と同じです。 (7)
'x' 符号付き16進数(小文字)。 (2)
'X' 符号付き16進数(大文字)。 (2)
'e' 浮動小数点指数形式(小文字)。 (3)
'E' 浮動小数点指数形式(大文字)。 (3)
'f' 浮動小数点10進形式。 (3)
'F' 浮動小数点10進形式。 (3)
'g' 浮動小数点形式。 指数が-4未満または精度以上の場合は小文字の指数形式を使用し、それ以外の場合は10進形式を使用します。 (4)
'G' 浮動小数点形式。 指数が-4未満または精度以上の場合は大文字の指数形式を使用し、それ以外の場合は10進形式を使用します。 (4)
'c' 単一文字(整数または単一文字ストリングを受け入れます)。
'r' 文字列( repr()を使用してPythonオブジェクトを変換します)。 (5)
's' 文字列( str()を使用してPythonオブジェクトを変換します)。 (6)
'%' 引数は変換されず、結果は'%'文字になります。

ノート:

  1. 代替形式では、結果の先頭文字がまだゼロでない場合、左側のパディングと数値の書式設定の間に先行ゼロ('0')が挿入されます。

  2. 別の形式では、先頭の'0x'または'0X''x'または'X'形式のどちらが使用されたかによって異なります)が最初の桁の前に挿入されます。

  3. 別の形式では、数字が続かない場合でも、結果には常に小数点が含まれます。

    精度は小数点以下の桁数を決定し、デフォルトは6です。

  4. 別の形式では、結果に常に小数点が含まれ、後続のゼロはそうでない場合のように削除されません。

    精度は、小数点の前後の有効桁数を決定し、デフォルトは6です。

  5. %r変換はPython2.0で追加されました。

    精度によって、使用される最大文字数が決まります。

  6. 提供されるオブジェクトまたはフォーマットが unicode 文字列の場合、結果の文字列も unicode になります。

    精度によって、使用される最大文字数が決まります。

  7. PEP 237 を参照してください。

Python文字列には明示的な長さがあるため、%s変換では、'\0'が文字列の終わりであるとは想定されていません。

バージョン2.7で変更:絶対値が1e50を超える数値の %f変換は、%g変換に置き換えられなくなりました。


追加の文字列操作は、標準モジュール string および re で定義されています。


5.6.3。 XRangeタイプ

xrange タイプは、ループに一般的に使用される不変のシーケンスです。 xrange タイプの利点は、 xrange オブジェクトが表す範囲のサイズに関係なく、常に同じ量のメモリを使用することです。 一貫したパフォーマンス上の利点はありません。

XRangeオブジェクトの動作はほとんどありません。インデックス作成、反復、および len()関数のみをサポートします。


5.6.4。 可変シーケンスタイプ

Listオブジェクトと bytearray オブジェクトは、オブジェクトのインプレース変更を可能にする追加の操作をサポートします。 他の可変シーケンスタイプ(言語に追加された場合)もこれらの操作をサポートする必要があります。 文字列とタプルは不変のシーケンスタイプです。このようなオブジェクトは、一度作成すると変更できません。 次の操作は、可変シーケンスタイプで定義されています( x は任意のオブジェクトです)。

手術 結果 ノート
s[i] = x s のアイテム ix に置き換えられます
s[i:j] = t i から j までの s のスライスは、反復可能な t の内容に置き換えられます。
del s[i:j] s[i:j] = []と同じ
s[i:j:k] = t s[i:j:k]の要素は、 t の要素に置き換えられます。 (1)
del s[i:j:k] s[i:j:k]の要素をリストから削除します
s.append(x) s[len(s):len(s)] = [x]と同じ (2)
s.extend(t)またはs += t ほとんどの場合、s[len(s):len(s)] = tと同じです (3)
s *= n s を更新してその内容を n 回繰り返します (11)
s.count(x) is[i] == xの戻り数
s.index(x[, i[, j]]) s[k] == xおよびi <= k < jのような最小の k を返します (4)
s.insert(i, x) s[i:i] = [x]と同じ (5)
s.pop([i]) x = s[i]; del s[i]; return xと同じ (6)
s.remove(x) del s[s.index(x)]と同じ (4)
s.reverse() s の項目を元に戻します (7)
s.sort([cmp[, key[, reverse]]]) s のアイテムを所定の位置に並べ替えます (7)(8)(9)(10)

ノート:

  1. t は、置き換えるスライスと同じ長さである必要があります。

  2. PythonのC実装は、歴史的に複数のパラメーターを受け入れ、それらを暗黙的にタプルに結合してきました。 これはPython2.0では機能しなくなりました。 この誤った機能の使用は、Python1.4以降非推奨になっています。

  3. t は、任意の反復可能なオブジェクトにすることができます。

  4. sx が見つからない場合、ValueErrorを発生させます。 index()メソッドに2番目または3番目のパラメーターとして負のインデックスが渡されると、スライスインデックスと同様にリストの長さが追加されます。 それでも負の場合は、スライスインデックスと同様に、ゼロに切り捨てられます。

    バージョン2.3で変更:以前は、index()には開始位置と停止位置を指定するための引数がありませんでした。

  5. insert()メソッドに最初のパラメーターとして負のインデックスが渡されると、スライスインデックスと同様にリストの長さが追加されます。 それでも負の場合は、スライスインデックスと同様に、ゼロに切り捨てられます。

    バージョン2.3で変更:以前は、すべての負のインデックスがゼロに切り捨てられていました。

  6. pop()メソッドのオプションの引数 i はデフォルトで-1であるため、デフォルトでは最後の項目が削除されて返されます。

  7. sort()およびreverse()メソッドは、大きなリストをソートまたは反転するときにスペースを節約するために、リストを所定の位置に変更します。 それらが副作用によって動作することを思い出させるために、それらはソートまたは反転されたリストを返しません。

  8. sort()メソッドは、比較を制御するためのオプションの引数を取ります。

    cmp は、2つの引数(リストアイテム)のカスタム比較関数を指定します。これは、最初の引数が2番目の引数よりも小さい、等しい、または大きいと見なされるかどうかに応じて、負、ゼロ、または正の数を返す必要があります。 cmp=lambda x,y: cmp(x.lower(), y.lower())。 デフォルト値はNoneです。

    key は、各リスト要素から比較キーを抽出するために使用される1つの引数key=str.lowerの関数を指定します。 デフォルト値はNoneです。

    reverse はブール値です。 Trueに設定すると、リスト要素は、各比較が逆になったかのように並べ替えられます。

    一般に、キーおよびリバース変換プロセスは、同等の cmp 関数を指定するよりもはるかに高速です。 これは、 cmp がリスト要素ごとに複数回呼び出されるのに対し、キーリバースは各要素に1回だけ触れるためです。 functools.cmp_to_key()を使用して、古いスタイルの cmp 関数を key 関数に変換します。

    バージョン2.3で変更: cmp を省略するのと同等のNoneのサポートが追加されました。

    バージョン2.4で変更: key および reverse のサポートが追加されました。

  9. Python 2.3以降、sort()メソッドは安定していることが保証されています。 同等に比較される要素の相対的な順序を変更しないことが保証されている場合、並べ替えは安定しています。これは、複数のパスで並べ替える場合に役立ちます(たとえば、部門で並べ替えてから給与等級で並べ替える)。

  10. n は整数、または __ index __()を実装するオブジェクトです。 n のゼロ値と負の値は、シーケンスをクリアします。 シーケンス内のアイテムはコピーされません。 シーケンスタイプ(str、unicode、list、tuple、bytearray、buffer、xrange )のs * nで説明されているように、これらは複数回参照されます。


5.7。 セットタイプ— 設定 、 冷凍セット

set オブジェクトは、個別の hashable オブジェクトの順序付けられていないコレクションです。 一般的な用途には、メンバーシップテスト、シーケンスからの重複の削除、交差、和集合、差、対称差などの数学演算の計算が含まれます。 (他のコンテナーについては、組み込みの dictlisttuple クラス、および collections モジュールを参照してください。)

バージョン2.4の新機能。


他のコレクションと同様に、セットはx in setlen(set)、およびfor x in setをサポートします。 順序付けられていないコレクションであるため、セットは要素の位置や挿入の順序を記録しません。 したがって、セットは、インデックス付け、スライス、またはその他のシーケンスのような動作をサポートしていません。

現在、 setfrozenset の2つの組み込みセットタイプがあります。 set タイプは変更可能です— add()remove()などの方法を使用して内容を変更できます。 変更可能であるため、ハッシュ値がなく、辞書キーまたは別のセットの要素として使用することはできません。 frozenset タイプは不変であり、 hashable —作成後にその内容を変更することはできません。 したがって、辞書キーとして、または別のセットの要素として使用できます。

Python 2.7以降、空でないセット(frozensetsではない)は、 set コンストラクターに加えて、中括弧内に要素のコンマ区切りリストを配置することで作成できます。例:{'jack', 'sjoerd'}

両方のクラスのコンストラクターは同じように機能します。

class set([iterable])
class frozenset([iterable])

要素が iterable から取得された新しいセットまたはfrozensetオブジェクトを返します。 セットの要素はハッシュ可能である必要があります。 セットのセットを表すには、内部セットは frozenset オブジェクトである必要があります。 iterable が指定されていない場合、新しい空のセットが返されます。

set および frozenset のインスタンスは、次の操作を提供します。

len(s)

セット s の要素数を返します( s のカーディナリティ)。

x in s

s のメンバーシップについて x をテストします。

x not in s

s の非メンバーシップについて x をテストします。

isdisjoint(other)

セットに other と共通の要素がない場合は、Trueを返します。 セットは、それらの共通部分が空のセットである場合にのみ互いに素です。

バージョン2.6の新機能。

issubset(other)
set <= other

セット内のすべての要素がその他にあるかどうかをテストします。

set < other

セットが other の適切なサブセット、つまりset <= other and set != otherであるかどうかをテストします。

issuperset(other)
set >= other

other のすべての要素がセットに含まれているかどうかをテストします。

set > other

セットが other の適切なスーパーセット、つまりset >= other and set != otherであるかどうかをテストします。

union(*others)
set | other | ...

セットおよび他のすべての要素を含む新しいセットを返します。

バージョン2.6で変更:複数の入力反復可能オブジェクトを受け入れます。

intersection(*others)
set & other & ...

セットと他のすべてに共通の要素を持つ新しいセットを返します。

バージョン2.6で変更:複数の入力反復可能オブジェクトを受け入れます。

difference(*others)
set - other - ...

セット内に他の要素にはない要素を含む新しいセットを返します。

バージョン2.6で変更:複数の入力反復可能オブジェクトを受け入れます。

symmetric_difference(other)
set ^ other

セットまたはその他のいずれか(両方ではない)の要素を含む新しいセットを返します。

copy()

セットの浅いコピーを返します。

union()intersection()Difference()、および symmetric_difference()、[ X138X] issubset()、および issuperset()メソッドは、引数として反復可能なものを受け入れます。 対照的に、それらの演算子ベースの対応物は、それらの引数がセットである必要があります。 これにより、set('abc') & 'cbs'のようなエラーが発生しやすい構造が排除され、より読みやすいset('abc').intersection('cbs')が優先されます。

setfrozenset はどちらも、セットの比較をサポートします。 2つのセットは、各セットのすべての要素が他の要素に含まれている場合にのみ等しくなります(それぞれが他のサブセットです)。 最初のセットが2番目のセットの適切なサブセットである場合(サブセットであるが等しくない場合)に限り、セットは別のセットよりも小さくなります。 最初のセットが2番目のセットの適切なスーパーセットである場合(スーパーセットですが、等しくない場合)に限り、セットは別のセットよりも大きくなります。

set のインスタンスは、メンバーに基づいて frozenset のインスタンスと比較されます。 たとえば、set('abc') == frozenset('abc')Trueを返し、set('abc') in set([frozenset('abc')])も返します。

サブセットと同等性の比較は、全順序関数に一般化されていません。 たとえば、空でない2つの互いに素なセットは等しくなく、互いにサブセットではないため、次の allFalseを返します:a<ba==b、またはa>b。 したがって、セットは__cmp__()メソッドを実装していません。

セットは半順序(サブセット関係)のみを定義するため、list.sort()メソッドの出力はセットのリストに対して未定義です。

辞書キーなどのセット要素は、ハッシュ可能である必要があります。

set インスタンスと frozenset を混合する二項演算は、最初のオペランドのタイプを返します。 例:frozenset('ab') | set('bc')frozenset のインスタンスを返します。

次の表に、フリーズセットの不変インスタンスに適用されないセットで使用可能な操作を示します。

update(*others)
set |= other | ...

セットを更新し、他のすべての要素を追加します。

バージョン2.6で変更:複数の入力反復可能オブジェクトを受け入れます。

intersection_update(*others)
set &= other & ...

セットを更新し、セット内で見つかった要素と他のすべての要素のみを保持します。

バージョン2.6で変更:複数の入力反復可能オブジェクトを受け入れます。

difference_update(*others)
set -= other | ...

セットを更新し、他の要素で見つかった要素を削除します。

バージョン2.6で変更:複数の入力反復可能オブジェクトを受け入れます。

symmetric_difference_update(other)
set ^= other

セットを更新し、どちらかのセットで見つかった要素のみを保持しますが、両方では見つかりません。

add(elem)

要素 elem をセットに追加します。

remove(elem)

セットから要素 elem を削除します。 elem がセットに含まれていない場合、KeyErrorを上げます。

discard(elem)

要素 elem が存在する場合は、セットから削除します。

pop()

セットから任意の要素を削除して返します。 セットが空の場合、KeyErrorを上げます。

clear()

セットからすべての要素を削除します。

update()section_update()Difference_update()、および symmetric_difference_update()メソッドの非オペレーターバージョンに注意してください。 iterableを引数として受け入れます。

__contains__()remove()、および discard()メソッドの elem 引数が設定されている場合があることに注意してください。 同等のフリーズセットの検索をサポートするために、 elem から一時的なセットが作成されます。

も参照してください

内蔵セットタイプとの比較
セットモジュールと組み込みセットタイプの違い。


5.8。 マッピングタイプ— dict

マッピングオブジェクトは、ハッシュ可能値を任意のオブジェクトにマップします。 マッピングは可変オブジェクトです。 現在、標準のマッピングタイプは辞書のみです。 (他のコンテナーについては、組み込みのlistsettuple クラス、および collections モジュールを参照してください。)

辞書のキーはほぼ任意の値です。 ハッシュ可能ではない値、つまり、リスト、辞書、またはその他の可変タイプ(オブジェクトIDではなく値によって比較される)を含む値は、キーとして使用できません。 キーに使用される数値タイプは、数値比較の通常の規則に従います。2つの数値が等しい場合(11.0など)、同じ辞書エントリにインデックスを付けるために交換可能に使用できます。 (ただし、コンピューターは浮動小数点数を近似値として格納するため、通常、それらを辞書キーとして使用することは賢明ではないことに注意してください。)

辞書は、key: valueペアのコンマ区切りリストを中かっこで囲むことによって作成できます。たとえば、{'jack': 4098, 'sjoerd': 4127}または{4098: 'jack', 4127: 'sjoerd'}、または dict コンストラクターによって作成できます。 。

class dict(**kwarg)
class dict(mapping, **kwarg)
class dict(iterable, **kwarg)

オプションの定位置引数と、場合によっては空のキーワード引数のセットから初期化された新しい辞書を返します。

位置引数が指定されていない場合、空の辞書が作成されます。 位置引数が指定され、それがマッピングオブジェクトである場合、ディクショナリはマッピングオブジェクトと同じキーと値のペアで作成されます。 それ以外の場合、定位置引数は iterable オブジェクトである必要があります。 iterableの各アイテムは、それ自体が正確に2つのオブジェクトを持つiterableである必要があります。 各アイテムの最初のオブジェクトが新しいディクショナリのキーになり、2番目のオブジェクトが対応する値になります。 キーが複数回出現する場合、そのキーの最後の値が新しいディクショナリの対応する値になります。

キーワード引数が指定されている場合、キーワード引数とその値は、位置引数から作成された辞書に追加されます。 追加されるキーがすでに存在する場合、keyword引数の値がpositional引数の値に置き換わります。

説明のために、次の例はすべて{"one": 1, "two": 2, "three": 3}に等しい辞書を返します。

>>> a = dict(one=1, two=2, three=3)
>>> b = {'one': 1, 'two': 2, 'three': 3}
>>> c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
>>> d = dict([('two', 2), ('one', 1), ('three', 3)])
>>> e = dict({'three': 3, 'one': 1, 'two': 2})
>>> a == b == c == d == e
True

最初の例のようにキーワード引数を指定すると、有効なPython識別子であるキーに対してのみ機能します。 それ以外の場合は、任意の有効なキーを使用できます。

バージョン2.2の新機能。

バージョン2.3で変更:キーワード引数から辞書を作成するためのサポートが追加されました。

これらは、ディクショナリがサポートする操作です(したがって、カスタムマッピングタイプもサポートする必要があります)。

len(d)

辞書 d のアイテム数を返します。

d[key]

キーキーd のアイテムを返します。 キーがマップにない場合、KeyErrorを上げます。

dictのサブクラスがメソッド__missing__()を定義し、 key が存在しない場合、d[key]操作は、キー key を引数としてそのメソッドを呼び出します。 次に、d[key]演算は、__missing__(key)呼び出しによって返されるまたは発生するものをすべて返すか発生します。 他の操作やメソッドは__missing__()を呼び出しません。 __missing__()が定義されていない場合、KeyErrorが発生します。 __missing__()はメソッドである必要があります。 インスタンス変数にすることはできません。

>>> class Counter(dict):
...     def __missing__(self, key):
...         return 0
>>> c = Counter()
>>> c['red']
0
>>> c['red'] += 1
>>> c['red']
1

上記の例は、 collections.Counter の実装の一部を示しています。 別の__missing__メソッドが collections.defaultdict によって使用されます。

バージョン2.5の新機能: dictサブクラスの__missing__メソッドの認識。

d[key] = value

d[key]に設定します。

del d[key]

d からd[key]を削除します。 キーがマップにない場合、KeyErrorを上げます。

key in d

d にキーキーがある場合はTrueを返し、そうでない場合はFalseを返します。

バージョン2.2の新機能。

key not in d

not key in dと同等です。

バージョン2.2の新機能。

iter(d)

辞書のキーに対してイテレータを返します。 これは iterkeys()のショートカットです。

clear()

辞書からすべてのアイテムを削除します。

copy()

辞書の浅いコピーを返します。

fromkeys(seq[, value])

seq のキーと、 value に設定された値を使用して新しい辞書を作成します。

fromkeys()は、新しい辞書を返すクラスメソッドです。 value のデフォルトはNoneです。

バージョン2.3の新機能。

get(key[, default])

key が辞書にある場合は、 key の値を返します。それ以外の場合は、 default を返します。 default が指定されていない場合、デフォルトでNoneになるため、このメソッドでKeyErrorが発生することはありません。

has_key(key)

辞書にキーが存在するかどうかをテストします。 has_key()は非推奨になり、key in dが優先されます。

items()

辞書の(key, value)ペアのリストのコピーを返します。

items()keys()values()iteritems()iterkeys()の場合、および itervalues()は、辞書に介入することなく呼び出され、リストは直接対応します。 これにより、 zip()pairs = zip(d.values(), d.keys())を使用して(value, key)ペアを作成できます。 iterkeys()メソッドと itervalues()メソッドにも同じ関係が当てはまります。pairs = zip(d.itervalues(), d.iterkeys())pairsに同じ値を提供します。 同じリストを作成する別の方法はpairs = [(v, k) for (k, v) in d.iteritems()]です。

iteritems()

ディクショナリの(key, value)ペアのイテレータを返します。 dict.items()の注を参照してください。

辞書のエントリを追加または削除するときに iteritems()を使用すると、RuntimeErrorが発生したり、すべてのエントリの反復に失敗したりする場合があります。

バージョン2.2の新機能。

iterkeys()

辞書のキーに対してイテレータを返します。 dict.items()の注を参照してください。

辞書のエントリを追加または削除するときに iterkeys()を使用すると、RuntimeErrorが発生したり、すべてのエントリの反復に失敗したりする場合があります。

バージョン2.2の新機能。

itervalues()

ディクショナリの値に対するイテレータを返します。 dict.items()の注を参照してください。

ディクショナリのエントリを追加または削除するときに itervalues()を使用すると、RuntimeErrorが発生したり、すべてのエントリの反復に失敗したりする場合があります。

バージョン2.2の新機能。

keys()

辞書のキーのリストのコピーを返します。 dict.items()の注を参照してください。

pop(key[, default])

key が辞書にある場合は、それを削除してその値を返します。それ以外の場合は、 default を返します。 default が指定されておらず、 key が辞書にない場合、KeyErrorが発生します。

バージョン2.3の新機能。

popitem()

辞書から任意の(key, value)ペアを削除して返します。

popitem()は、集合アルゴリズムでよく使用されるように、辞書を破壊的に反復するのに役立ちます。 辞書が空の場合、 popitem()を呼び出すと、KeyErrorが発生します。

setdefault(key[, default])

key が辞書にある場合は、その値を返します。 そうでない場合は、値が defaultkey を挿入し、 default を返します。 default のデフォルトはNoneです。

update([other])

other のキーと値のペアで辞書を更新し、既存のキーを上書きします。 Noneを返します。

update()は、別の辞書オブジェクトまたはキーと値のペアのイテラブル(タプルまたは長さ2の他のイテラブルとして)のいずれかを受け入れます。 キーワード引数が指定されている場合、ディクショナリは次のキーと値のペアで更新されます:d.update(red=1, blue=2)

バージョン2.4で変更:引数をキー/値ペアの反復可能にすることができ、キーワード引数を許可する。

values()

辞書の値のリストのコピーを返します。 dict.items()の注を参照してください。

viewitems()

辞書のアイテムの新しいビューを返します((key, value)ペア)。 ビューオブジェクトのドキュメントについては、以下を参照してください。

バージョン2.7の新機能。

viewkeys()

辞書のキーの新しいビューを返します。 ビューオブジェクトのドキュメントについては、以下を参照してください。

バージョン2.7の新機能。

viewvalues()

ディクショナリの値の新しいビューを返します。 ビューオブジェクトのドキュメントについては、以下を参照してください。

バージョン2.7の新機能。

辞書は、同じ(key, value)ペアを持っている場合にのみ、同等に比較されます。

5.8.1。 辞書ビューオブジェクト

dict.viewkeys()dict.viewvalues()、および dict.viewitems()によって返されるオブジェクトは、ビューオブジェクトです。 これらは、ディクショナリのエントリに関する動的なビューを提供します。つまり、ディクショナリが変更されると、ビューはこれらの変更を反映します。

ディクショナリビューを繰り返してそれぞれのデータを生成し、メンバーシップテストをサポートできます。

len(dictview)
辞書のエントリ数を返します。
iter(dictview)

ディクショナリ内のキー、値、またはアイテム((key, value)のタプルとして表される)に対するイテレータを返します。

キーと値は、ランダムではなく、Pythonの実装によって異なり、辞書の挿入と削除の履歴に応じて、任意の順序で繰り返されます。 キー、値、およびアイテムのビューがディクショナリに介入することなく繰り返される場合、アイテムの順序は直接対応します。 これにより、 zip()pairs = zip(d.values(), d.keys())を使用して(value, key)ペアを作成できます。 同じリストを作成する別の方法はpairs = [(v, k) for (k, v) in d.items()]です。

ディクショナリのエントリを追加または削除しているときにビューを反復すると、RuntimeErrorが発生したり、すべてのエントリの反復に失敗したりする場合があります。

x in dictview
x が基礎となる辞書のキー、値、または項目にある場合は、Trueを返します(後者の場合、 x(key, value)タプルである必要があります)。

キービューは、エントリが一意でハッシュ可能であるため、セットのようになっています。 すべての値がハッシュ可能であり、(キー、値)ペアが一意でハッシュ可能である場合、アイテムビューもセットのようになります。 (エントリは一般に一意ではないため、値ビューはセットのように扱われません。)次に、これらのセット操作を使用できます(「その他」は別のビューまたはセットのいずれかを指します)。

dictview & other
dictviewと他のオブジェクトの交点を新しいセットとして返します。
dictview | other
dictviewと他のオブジェクトの和集合を新しいセットとして返します。
dictview - other
dictviewと他のオブジェクト( other にない dictview のすべての要素)の違いを新しいセットとして返します。
dictview ^ other
dictviewと他のオブジェクトの対称差( dictview または other のすべての要素、ただし両方ではない)を新しいセットとして返します。

辞書ビューの使用例:

>>> dishes = {'eggs': 2, 'sausage': 1, 'bacon': 1, 'spam': 500}
>>> keys = dishes.viewkeys()
>>> values = dishes.viewvalues()

>>> # iteration
>>> n = 0
>>> for val in values:
...     n += val
>>> print(n)
504

>>> # keys and values are iterated over in the same order
>>> list(keys)
['eggs', 'bacon', 'sausage', 'spam']
>>> list(values)
[2, 1, 1, 500]

>>> # view objects are dynamic and reflect dict changes
>>> del dishes['eggs']
>>> del dishes['sausage']
>>> list(keys)
['spam', 'bacon']

>>> # set operations
>>> keys & {'eggs', 'bacon', 'salad'}
{'bacon'}

5.9。 ファイルオブジェクト

ファイルオブジェクトは、Cのstdioパッケージを使用して実装され、組み込みの open()関数を使用して作成できます。 ファイルオブジェクトは、 os.popen()os.fdopen()makefile()メソッドなど、他のいくつかの組み込み関数やメソッドによっても返されます。ソケットオブジェクト。 一時ファイルは tempfile モジュールを使用して作成でき、ファイルやディレクトリのコピー、移動、削除などの高レベルのファイル操作は shutil モジュールを使用して実行できます。

I / O関連の理由でファイル操作が失敗すると、例外IOErrorが発生します。 これには、ttyデバイスでのseek()や、読み取り用に開いたファイルの書き込みなど、何らかの理由で操作が定義されていない状況が含まれます。

ファイルには次の方法があります。

file.close()

ファイルを閉じます。 閉じたファイルの読み取りまたは書き込みはできなくなります。 ファイルを開く必要がある操作では、ファイルを閉じた後にValueErrorが発生します。 close()を複数回呼び出すことができます。

Python 2.5以降、 with ステートメントを使用すると、このメソッドを明示的に呼び出す必要がなくなります。 たとえば、次のコードは、 with ブロックが終了すると、 f を自動的に閉じます。

from __future__ import with_statement # This isn't required in Python 2.6

with open("hello.txt") as f:
    for line in f:
        print line,

古いバージョンのPythonでは、同じ効果を得るにはこれを行う必要がありました。

f = open("hello.txt")
try:
    for line in f:
        print line,
finally:
    f.close()

ノート

Pythonサポートのすべての「ファイルのような」タイプが with ステートメントのコンテキストマネージャーとして使用されるわけではありません。 コードがファイルのようなオブジェクトで動作することを意図している場合は、オブジェクトを直接使用する代わりに、関数 contextlib.closeing()を使用できます。

file.flush()

stdiofflush()のように、内部バッファをフラッシュします。 これは、一部のファイルのようなオブジェクトでは動作しない可能性があります。

ノート

flush()は、必ずしもファイルのデータをディスクに書き込むとは限りません。 この動作を確実にするには、 flush()に続いて os.fsync()を使用します。

file.fileno()

基礎となる実装がオペレーティングシステムからのI / O操作を要求するために使用する整数の「ファイル記述子」を返します。 これは、 fcntl モジュールや os.read()などのファイル記述子を使用する他の低レベルのインターフェイスに役立ちます。

ノート

実際のファイル記述子を持たないファイルのようなオブジェクトは、このメソッドを提供するべきではありません。

file.isatty()

ファイルがtty(のような)デバイスに接続されている場合はTrueを返し、そうでない場合はFalseを返します。

ノート

ファイルのようなオブジェクトが実際のファイルに関連付けられていない場合、このメソッドは実装されるべきではありません

file.next()

ファイルオブジェクトはそれ自体のイテレータです。たとえば、iter(f)f を返します( f が閉じている場合を除く)。 ファイルがイテレータとして使用される場合、通常は for ループ(たとえば、for line in f: print line.strip())で、 next()メソッドが繰り返し呼び出されます。 このメソッドは、次の入力行を返すか、ファイルが読み取り用に開かれているときにEOFがヒットするとStopIterationを上げます(ファイルが書き込み用に開かれているときの動作は定義されていません)。 for ループをファイルの行をループする最も効率的な方法にするために(非常に一般的な操作)、 next()メソッドは非表示の先読みバッファーを使用します。 先読みバッファを使用した結果、 next()を他のファイルメソッド( readline()など)と組み合わせても正しく機能しません。 ただし、 seek()を使用してファイルを絶対位置に再配置すると、先読みバッファーがフラッシュされます。

バージョン2.3の新機能。

file.read([size])

ファイルから最大サイズバイトを読み取ります(サイズバイトを取得する前に読み取りがEOFに達した場合はそれより少なくなります)。 size 引数が負であるか省略されている場合は、EOFに達するまですべてのデータを読み取ります。 バイトは文字列オブジェクトとして返されます。 EOFがすぐに検出されると、空の文字列が返されます。 (ttysなどの特定のファイルでは、EOFがヒットした後も読み取りを続行するのが理にかなっています。)このメソッドは、[X207Xに近い値を取得するために、基になるC関数fread()を複数回呼び出す場合があることに注意してください。 ] size バイトを可能な限り。 また、非ブロッキングモードでは、 size パラメータが指定されていなくても、要求されたよりも少ないデータが返される場合があることに注意してください。

ノート

この関数は、基礎となるfread() C関数の単なるラッパーであり、EOF値がキャッシュされているかどうかなどのコーナーケースでも同じように動作します。

file.readline([size])

ファイルから1行全体を読み取ります。 末尾の改行文字は文字列に保持されます(ただし、ファイルが不完全な行で終わる場合は存在しない可能性があります)。 6 size 引数が存在し、負でない場合、それは最大バイト数(末尾の改行を含む)であり、不完全な行が返される場合があります。 size が0でない場合、EOFがすぐに検出されると、空の文字列がのみで返されます。

ノート

stdiofgets()とは異なり、返される文字列には、入力で発生したヌル文字('\0')が含まれます。

file.readlines([sizehint])
readline()を使用してEOFまで読み取り、読み取った行を含むリストを返します。 オプションの sizehint 引数が存在する場合、EOFまで読み取る代わりに、合計約 sizehint バイト(おそらく内部バッファーサイズに切り上げた後)の行全体が読み取られます。 ファイルのようなインターフェイスを実装するオブジェクトは、実装できない場合、または効率的に実装できない場合、 sizehint を無視することを選択できます。
file.xreadlines()

このメソッドは、iter(f)と同じものを返します。

バージョン2.1の新機能。

バージョン2.3以降非推奨:代わりにfor line in fileを使用してください。

file.seek(offset[, whence])

stdiofseek()のように、ファイルの現在の位置を設定します。 whence 引数はオプションであり、デフォルトはos.SEEK_SETまたは0(絶対ファイル配置)です。 他の値は、os.SEEK_CURまたは1(現在の位置を基準にしてシーク)およびos.SEEK_ENDまたは2(ファイルの終わりを基準にしてシーク)です。 戻り値はありません。

たとえば、f.seek(2, os.SEEK_CUR)は位置を2つ進め、f.seek(-3, os.SEEK_END)は位置を最後から3番目に設定します。

ファイルを追加用に開いた場合(モード'a'または'a+')、 seek()操作は次回の書き込み時に取り消されることに注意してください。 ファイルが追加モード(モード'a')での書き込み用にのみ開かれている場合、この方法は基本的に何も実行されませんが、読み取りが有効になっている追加モード(モード'a+')で開かれたファイルには引き続き役立ちます。 ])。 ファイルがテキストモード('b'なし)で開かれている場合、 tell()によって返されるオフセットのみが有効です。 他のオフセットを使用すると、未定義の動作が発生します。

すべてのファイルオブジェクトがシーク可能であるとは限らないことに注意してください。

バージョン2.6で変更: float値をオフセットとして渡すことは非推奨になりました。

file.tell()

stdioftell()のように、ファイルの現在の位置を返します。

ノート

Windowsでは、 tell()は、Unixスタイルの行末のあるファイルを読み取るときに、不正な値を返す可能性があります(fgets()の後)。 この問題を回避するには、バイナリモード('rb')を使用します。

file.truncate([size])
ファイルのサイズを切り捨てます。 オプションの size 引数が存在する場合、ファイルは(最大で)そのサイズに切り捨てられます。 サイズはデフォルトで現在の位置になります。 現在のファイル位置は変更されません。 指定されたサイズがファイルの現在のサイズを超える場合、結果はプラットフォームに依存することに注意してください。ファイルが変更されないままである、ゼロで埋められているかのように指定されたサイズに増加する、または未定義の新しいコンテンツで指定されたサイズに増加する可能性があります。 可用性:Windows、多くのUnixバリアント。
file.write(str)
ファイルに文字列を書き込みます。 戻り値はありません。 バッファリングのため、 flush()または close()メソッドが呼び出されるまで、文字列が実際にファイルに表示されない場合があります。
file.writelines(sequence)
文字列のシーケンスをファイルに書き込みます。 シーケンスは、文字列、通常は文字列のリストを生成する任意の反復可能なオブジェクトにすることができます。 戻り値はありません。 (名前は readlines()と一致することを意図しています。 writelines()は行区切り記号を追加しません。)

ファイルはイテレータプロトコルをサポートします。 各反復は readline()と同じ結果を返し、 readline()メソッドが空の文字列を返すと反復は終了します。

ファイルオブジェクトは、他にも多くの興味深い属性を提供します。 これらはファイルのようなオブジェクトには必要ありませんが、特定のオブジェクトに意味がある場合は実装する必要があります。

file.closed
ファイルオブジェクトの現在の状態を示すbool。 これは読み取り専用の属性です。 close()メソッドは値を変更します。 すべてのファイルのようなオブジェクトで使用できるとは限りません。
file.encoding

このファイルが使用するエンコーディング。 Unicode文字列がファイルに書き込まれると、このエンコーディングを使用してバイト文字列に変換されます。 さらに、ファイルが端末に接続されている場合、属性は端末が使用する可能性のあるエンコーディングを示します(ユーザーが端末を誤って構成した場合、その情報は正しくない可能性があります)。 この属性は読み取り専用であり、すべてのファイルのようなオブジェクトに存在するとは限りません。 Noneの場合もあります。この場合、ファイルはシステムのデフォルトエンコーディングを使用してUnicode文字列を変換します。

バージョン2.3の新機能。

file.errors

エンコーディングとともに使用されるUnicodeエラーハンドラ。

バージョン2.6の新機能。

file.mode
ファイルのI / Oモード。 open()組み込み関数を使用してファイルが作成された場合、これは mode パラメーターの値になります。 これは読み取り専用の属性であり、すべてのファイルのようなオブジェクトに存在するとは限りません。
file.name

ファイルオブジェクトが open()を使用して作成された場合、ファイルの名前。 それ以外の場合は、<...>の形式のファイルオブジェクトのソースを示す文字列。 これは読み取り専用の属性であり、すべてのファイルのようなオブジェクトに存在するとは限りません。

file.newlines
Pythonがユニバーサル改行を有効にして(デフォルトで)ビルドされた場合、この読み取り専用属性が存在し、ユニバーサル改行読み取りモードで開かれたファイルの場合、ファイルの読み取り中に検出された改行のタイプを追跡します。 取得できる値は、'\r''\n''\r\n'None(不明、改行はまだ読み取られていません)、または表示されているすべての改行タイプを含むタプルです。 、複数の改行規則が検出されたことを示します。 ユニバーサルニューライン読み取りモードで開かれていないファイルの場合、この属性の値はNoneになります。
file.softspace

print ステートメントを使用するときに、スペース文字を別の値の前に印刷する必要があるかどうかを示すブール値。 ファイルオブジェクトをシミュレートしようとしているクラスには、書き込み可能な softspace 属性も必要です。これは、ゼロに初期化する必要があります。 これは、Pythonで実装されているほとんどのクラスで自動的に行われます(属性アクセスをオーバーライドするオブジェクトには注意が必要な場合があります)。 Cで実装される型は、書き込み可能な softspace 属性を提供する必要があります。

ノート

この属性は、 print ステートメントを制御するためには使用されませんが、 print の実装がその内部状態を追跡できるようにするために使用されます。


5.10。 メモリビュータイプ

バージョン2.7の新機能。


memoryview オブジェクトを使用すると、Pythonコードは、コピーせずにバッファプロトコルをサポートするオブジェクトの内部データにアクセスできます。 メモリは通常、単純なバイトとして解釈されます。

class memoryview(obj)

obj を参照する memoryview を作成します。 obj はバッファプロトコルをサポートする必要があります。 バッファプロトコルをサポートする組み込みオブジェクトには、 str および bytearray が含まれます( unicode はサポートされません)。

memoryview には、 element の概念があります。これは、元のオブジェクト obj によって処理されるアトミックメモリユニットです。 strbytearray などの多くの単純なタイプの場合、要素は1バイトですが、他のサードパーティタイプはより大きな要素を公開する場合があります。

len(view)は、メモリビュービュー内の要素の総数を返します。 itemsize 属性は、単一の要素のバイト数を示します。

memoryview は、データを公開するためのスライスをサポートしています。 単一のインデックスを取得すると、単一の要素が str オブジェクトとして返されます。 フルスライスすると、サブビューが表示されます。

>>> v = memoryview('abcefg')
>>> v[1]
'b'
>>> v[-1]
'g'
>>> v[1:4]
<memory at 0x77ab28>
>>> v[1:4].tobytes()
'bce'

memoryviewがオーバーしているオブジェクトがそのデータの変更をサポートしている場合、memoryviewはスライスの割り当てをサポートします。

>>> data = bytearray('abcefg')
>>> v = memoryview(data)
>>> v.readonly
False
>>> v[0] = 'z'
>>> data
bytearray(b'zbcefg')
>>> v[1:4] = '123'
>>> data
bytearray(b'z123fg')
>>> v[2] = 'spam'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: cannot modify size of memoryview object

memoryviewオブジェクトのサイズを変更できないことに注意してください。

memoryview には2つのメソッドがあります。

tobytes()

バッファ内のデータをバイト文字列(クラス str のオブジェクト)として返します。

>>> m = memoryview("abc")
>>> m.tobytes()
'abc'
tolist()

バッファ内のデータを整数のリストとして返します。

>>> memoryview("abc").tolist()
[97, 98, 99]

使用可能な読み取り専用属性もいくつかあります。

format

ビュー内の各要素の形式( struct モジュールスタイル)を含む文字列。 これはデフォルトで'B'、単純なバイト文字列です。

itemsize

メモリビューの各要素のバイト単位のサイズ。

shape

ndim の長さの整数のタプルで、メモリの形状をN次元配列として提供します。

ndim

メモリが表す多次元配列の次元数を示す整数。

strides

ndim の長さの整数のタプルで、配列の各次元の各要素にアクセスするためのサイズをバイト単位で示します。

readonly

メモリが読み取り専用かどうかを示すブール値。


5.11。 コンテキストマネージャーの種類

バージョン2.5の新機能。


Pythonの with ステートメントは、コンテキストマネージャーによって定義されたランタイムコンテキストの概念をサポートします。 これは、ユーザー定義クラスがステートメント本体が実行される前に入力され、ステートメントが終了したときに終了するランタイムコンテキストを定義できるようにする2つの別個のメソッドを使用して実装されます。

コンテキスト管理プロトコルは、ランタイムコンテキストを定義するためにコンテキストマネージャーオブジェクトに提供する必要があるメソッドのペアで構成されています。

contextmanager.__enter__()

ランタイムコンテキストを入力し、このオブジェクトまたはランタイムコンテキストに関連する別のオブジェクトを返します。 このメソッドによって返される値は、このコンテキストマネージャーを使用して、 with ステートメントの as 句の識別子にバインドされます。

自分自身を返すコンテキストマネージャーの例は、ファイルオブジェクトです。 ファイルオブジェクトは__enter __()から戻り、 open()with ステートメントのコンテキスト式として使用できるようにします。

関連オブジェクトを返すコンテキストマネージャーの例は、 decimal.localcontext()によって返されるものです。 これらのマネージャーは、アクティブな10進コンテキストを元の10進コンテキストのコピーに設定してから、そのコピーを返します。 これにより、 with ステートメントの外部のコードに影響を与えることなく、 with ステートメントの本文の現在の10進コンテキストに変更を加えることができます。

contextmanager.__exit__(exc_type, exc_val, exc_tb)

ランタイムコンテキストを終了し、発生した例外を抑制する必要があるかどうかを示すブールフラグを返します。 with ステートメントの本体の実行中に例外が発生した場合、引数には例外のタイプ、値、およびトレースバック情報が含まれます。 それ以外の場合、3つの引数はすべてNoneです。

このメソッドからtrue値を返すと、 with ステートメントは例外を抑制し、 with ステートメントの直後のステートメントで実行を続行します。 それ以外の場合、このメソッドの実行が終了した後も例外は伝播し続けます。 このメソッドの実行中に発生する例外は、ステートメントの本体で発生した例外をステートメントに置き換えます。

渡された例外を明示的に再発生させることはできません。代わりに、このメソッドはfalse値を返し、メソッドが正常に完了し、発生した例外を抑制したくないことを示します。 これにより、コンテキスト管理コード(contextlib.nestedなど)は、 __ exit __()メソッドが実際に失敗したかどうかを簡単に検出できます。

Pythonは、簡単なスレッド同期、ファイルやその他のオブジェクトの迅速なクローズ、アクティブな10進算術コンテキストのより簡単な操作をサポートするためにいくつかのコンテキストマネージャーを定義しています。 特定のタイプは、コンテキスト管理プロトコルの実装を超えて特別に扱われることはありません。 いくつかの例については、 contextlib モジュールを参照してください。

Pythonのジェネレーターcontextlib.contextmanager デコレーターは、これらのプロトコルを実装するための便利な方法を提供します。 ジェネレーター関数がcontextlib.contextmanagerデコレーターで装飾されている場合、装飾されていないジェネレーター関数によって生成されるイテレーターではなく、必要な__enter__()および__exit__()メソッドを実装するコンテキストマネージャーを返します。 。

Python / C APIのPythonオブジェクトの型構造には、これらのメソッドのいずれにも特定のスロットがないことに注意してください。 これらのメソッドを定義する拡張タイプは、通常のPythonアクセス可能なメソッドとして提供する必要があります。 ランタイムコンテキストを設定するオーバーヘッドと比較して、単一クラスのディクショナリルックアップのオーバーヘッドはごくわずかです。


5.12。 その他の組み込み型

インタプリタは、他のいくつかの種類のオブジェクトをサポートします。 これらのほとんどは、1つまたは2つの操作のみをサポートします。

5.12.1。 モジュール

モジュールに対する唯一の特別な操作は属性アクセスです:m.name、ここで m はモジュールであり、 namem 'で定義された名前にアクセスします■シンボルテーブル。 モジュール属性を割り当てることができます。 ( import ステートメントは、厳密に言えば、モジュールオブジェクトに対する操作ではないことに注意してください。import fooは、 foo という名前のモジュールオブジェクトが存在する必要はなく、存在する必要があります。 foo という名前のモジュールの(外部)定義が必要です。)

すべてのモジュールの特別な属性は __ dict __ です。 これは、モジュールのシンボルテーブルを含む辞書です。 このディクショナリを変更すると、実際にはモジュールのシンボルテーブルが変更されますが、 __ dict __ 属性に直接割り当てることはできません(m.a1ですが、m.__dict__ = {})と書くことはできません。 __ dict __ を直接変更することはお勧めしません。

インタプリタに組み込まれているモジュールは、<module 'sys' (built-in)>のように記述されています。 ファイルからロードする場合は、<module 'os' from '/usr/local/lib/pythonX.Y/os.pyc'>と表記します。


5.12.2。 クラスとクラスインスタンス

これらについては、オブジェクト、値、およびタイプおよびクラス定義を参照してください。


5.12.3。 関数

関数オブジェクトは、関数定義によって作成されます。 関数オブジェクトに対する唯一の操作は、それを呼び出すことです:func(argument-list)

関数オブジェクトには、組み込み関数とユーザー定義関数の2種類があります。 どちらも(関数を呼び出すための)同じ操作をサポートしますが、実装が異なるため、オブジェクトタイプが異なります。

詳細については、関数定義を参照してください。


5.12.4。 メソッド

メソッドは、属性表記を使用して呼び出される関数です。 組み込みメソッド(リストのappend()など)とクラスインスタンスメソッドの2つのフレーバーがあります。 組み込みメソッドは、それらをサポートするタイプで説明されています。

実装は、クラスインスタンスメソッドに2つの特別な読み取り専用属性を追加します。m.im_selfはメソッドが動作するオブジェクトであり、m.im_funcはメソッドを実装する関数です。 m(arg-1, arg-2, ..., arg-n)を呼び出すことは、m.im_func(m.im_self, arg-1, arg-2, ..., arg-n)を呼び出すことと完全に同等です。

クラスインスタンスメソッドは、 bound または unbound のいずれかであり、それぞれ、メソッドがインスタンスまたはクラスのどちらを介してアクセスされたかを示します。 メソッドがバインドされていない場合、そのim_self属性はNoneになり、呼び出された場合は、明示的なselfオブジェクトを最初の引数として渡す必要があります。 この場合、selfは、バインドされていないメソッドのクラス(またはそのクラスのサブクラス)のインスタンスである必要があります。そうでない場合、TypeErrorが発生します。

関数オブジェクトと同様に、メソッドオブジェクトは任意の属性の取得をサポートします。 ただし、メソッド属性は実際には基になる関数オブジェクト(meth.im_func)に格納されるため、バインドされたメソッドまたはバインドされていないメソッドにメソッド属性を設定することはできません。 メソッドに属性を設定しようとすると、AttributeErrorが発生します。 メソッド属性を設定するには、基になる関数オブジェクトに明示的に設定する必要があります。

>>> class C:
...     def method(self):
...         pass
...
>>> c = C()
>>> c.method.whoami = 'my name is method'  # can't set on the method
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'instancemethod' object has no attribute 'whoami'
>>> c.method.im_func.whoami = 'my name is method'
>>> c.method.whoami
'my name is method'

詳細については、標準タイプ階層を参照してください。


5.12.5。 コードオブジェクト

コードオブジェクトは、関数本体などの「疑似コンパイルされた」実行可能Pythonコードを表すために実装によって使用されます。 グローバル実行環境への参照が含まれていないため、関数オブジェクトとは異なります。 コードオブジェクトは、組み込みの compile()関数によって返され、func_code属性を介して関数オブジェクトから抽出できます。 コードモジュールも参照してください。

コードオブジェクトは、(ソース文字列の代わりに) exec ステートメントまたは組み込みの eval()関数に渡すことで、実行または評価できます。

詳細については、標準タイプ階層を参照してください。


5.12.6。 タイプオブジェクト

タイプオブジェクトは、さまざまなオブジェクトタイプを表します。 オブジェクトの型には、組み込み関数 type()によってアクセスされます。 タイプに特別な操作はありません。 標準モジュール types は、すべての標準組み込み型の名前を定義します。

タイプは次のように記述されます:<type 'int'>


5.12.7。 ヌルオブジェクト

このオブジェクトは、値を明示的に返さない関数によって返されます。 特別な操作はサポートしていません。 None(組み込み名)という名前のnullオブジェクトが1つだけあります。

Noneと表記されています。


5.12.8。 楕円オブジェクト

このオブジェクトは、拡張スライス表記で使用されます(スライスを参照)。 特別な操作はサポートしていません。 Ellipsis (組み込み名)という名前の省略記号オブジェクトが1つだけあります。

Ellipsisと表記されています。 下付き文字の場合は、...と書くこともできます(例:seq[...])。


5.12.9。 NotImplementedオブジェクト

このオブジェクトは、サポートされていない型を操作するように求められたときに、比較および二項演算から返されます。 詳細については、比較を参照してください。

NotImplementedと表記されています。


5.12.10。 ブール値

ブール値は、2つの定数オブジェクトFalseTrueです。 これらは真理値を表すために使用されます(ただし、他の値も偽または真と見なすことができます)。 数値コンテキスト(たとえば、算術演算子の引数として使用される場合)では、それぞれ整数0および1のように動作します。 組み込み関数 bool()は、値が真理値として解釈できる場合、任意の値をブール値に変換するために使用できます(上記のセクション真理値テストを参照)。

それぞれFalseおよびTrueと表記されます。


5.12.11。 内部オブジェクト

この情報については、標準タイプ階層を参照してください。 スタックフレームオブジェクト、トレースバックオブジェクト、およびスライスオブジェクトについて説明します。


5.13。 特別な属性

実装は、関連するいくつかのオブジェクトタイプにいくつかの特別な読み取り専用属性を追加します。 これらの一部は、 dir()組み込み関数によって報告されません。

object.__dict__
オブジェクトの(書き込み可能な)属性を格納するために使用されるディクショナリまたはその他のマッピングオブジェクト。
object.__methods__

バージョン2.2以降非推奨:組み込み関数 dir()を使用して、オブジェクトの属性のリストを取得します。 この属性は使用できなくなりました。

object.__members__

バージョン2.2以降非推奨:組み込み関数 dir()を使用して、オブジェクトの属性のリストを取得します。 この属性は使用できなくなりました。

instance.__class__
クラスインスタンスが属するクラス。
class.__bases__
クラスオブジェクトの基本クラスのタプル。
definition.__name__
クラス、タイプ、関数、メソッド、記述子、またはジェネレーターインスタンスの名前。

次の属性は、新しいスタイルのクラスでのみサポートされています。

class.__mro__
この属性は、メソッドの解決中に基本クラスを検索するときに考慮されるクラスのタプルです。
class.mro()
このメソッドをメタクラスでオーバーライドして、インスタンスのメソッド解決順序をカスタマイズできます。 クラスのインスタンス化時に呼び出され、その結果は __ mro __ に格納されます。
class.__subclasses__()

新しいスタイルの各クラスは、その直接のサブクラスへの弱参照のリストを保持します。 このメソッドは、まだ生きているすべての参照のリストを返します。 例:

>>> int.__subclasses__()
[<type 'bool'>]

脚注

1
これらの特別なメソッドの詳細については、Pythonリファレンスマニュアル(基本的なカスタマイズ)を参照してください。
2
結果として、リスト[1, 2][1.0, 2.0]と等しいと見なされ、タプルについても同様です。
3
パーサーはオペランドのタイプを判別できないため、これらは持っている必要があります。
41234
大文字と小文字を区別する文字は、一般的なカテゴリプロパティが「Lu」(文字、大文字)、「Ll」(文字、小文字)、または「Lt」(文字、タイトルケース)のいずれかである文字です。
5
したがって、タプルのみをフォーマットするには、フォーマットするタプルのみが要素であるシングルトンタプルを提供する必要があります。
6
改行をオンのままにしておくことの利点は、空の文字列を返すことが明確なEOF表示になることです。 また、ファイルの最後の行が改行で終わっているかどうかを判断することもできます(たとえば、ファイルの行をスキャンしながらファイルの正確なコピーを作成する場合など)。 !)。