Style chooser: Modern, Modern B&W, Classic, High contrast or Printing

目次

この文書について

バージョン 2.4
新しいバージョンができた際は こちら に掲載されます。
間違いや不明確な点、その他意見がありましたら、ぜひ 連絡 してください。 Richard Gruet (pqr at rgruet.net).
〔翻訳上のご意見は翻訳者までお願いします。〕

Last modified on May 19, 2006
17 Feb 2005,
upgraded by Richard Gruet for Python 2.4
03 Oct 2003,
upgraded by Richard Gruet for Python 2.3
11 May 2003, rev 4
upgraded by Richard Gruet for Python 2.2 (restyled by Andrei)
7 Aug 2001
upgraded by Simon Brunning for Python 2.1
16 May 2001
upgraded by Richard Gruet and Simon Brunning for Python 2.0
18 Jun 2000
upgraded by Richard Gruet for Python 1.5.2
30 Oct 1995
created by Chris Hoffmann for Python 1.3
文字色について:
2.3 から 2.4 にかけて追加された機能
2.2 から 2.3 にかけて追加された機能
2.1 から 2.2 にかけて追加された機能
参考文献:

日本語訳(現在鋭意翻訳中):

$Date: 2006-08-19 00:31:00 +0900 (土, 19 8 2006) $
セトヤマ ハルキ <haruki at planewave dot org>
サイトウ テツヤ <t2psyto at gmail dot com>
リンク:
Tip: Python インタプリタに help, help(object) または help("name") と入力するとヘルプが表示される

起動オプション

python[w] [-dEhimOQStuUvVWxX?] [-c command | scriptFile | - ] [args]
    (pythonw は、ターミナル/コンソールを開かない。 python だと開く)
起動オプション
オプション 効果
-d パーサのデバッグ情報を表示する (PYTHONDEBUG=x と同じ)
-E (PYTHONPATH などの) 環境変数を無視する
-h ヘルプメッセージを表示し終了する (以前の -?)
-i script を実行した後、対話モードに入る (PYTHONINSPECT=x と同じ)。 標準出力がターミナルでなくても強制的にプロンプトを出力する
-m module modulesys.path から探し、スクリプトとして実行する
-O 生成するバイトコードの最適化を行う (PYTHONOPTIMIZE=x と同じ)。Assert を抑制する
-OO -O の最適化に加え、ドキュメンテーション文字列を削除する
-Q arg 除算オプション : -Qold (デフォルト), -Qwarn, -Qwarnall, -Qnew
-S 初期化時に import site を実行しない
-t タブの使用法に矛盾があれば警告する (-tt: エラーとする)
-u 標準出力と標準エラーをバッファ無しのバイナリモードにする (PYTHONUNBUFFERED=x と同じ)
-U 文字リテラルをすべてユニコードリテラルとして解釈する
-v 詳細表示する (import 文をトレースする) 。(PYTHONVERBOSE=x と同じ)
-V バージョン番号を表示し終了する
-W arg 警告の制御 (arg は action:message:category:module:lineno のどれか)
-x ソースの第1行目をスキップする。#!cmd という unix 式でない表記を使用可能とする
-X クラスベースの組み込み例外を無効にする (例外の後方互換性のため)
-c command 与えられたコマンドを実行する (以降のセクションを参照)。 このオプションの後には、別のオプションを記述できない (コマンド自体の引数として扱われる)
scriptFile 実行する Python ファイルの名前。標準入力から読み込まれる
- 標準入力からプログラムを読み込む (ターミナルの場合、デフォルトでは対話モードになる)
args スクリプトやコマンドに渡される引数 (sys.argv[1:] に入る)
  スクリプトやコマンドを指定しないと、Python は対話モードに入る
  • 標準ディストリビューションに含まれる IDE: IDLE (tkinter based, portable), Pythonwin (Windows)。 他のフリーの IDE: IPython (enhanced interactive Python shell), ERIC, SPE, BOA constructor.
  • python の標準的な モジュールヘッダ :
    #!/usr/bin/env python
    # -*- coding: latin1 -*-
    2.3 以降、Python のソースファイルの 文字エンコーディング を はじめの 2 行の内に宣言する必要がある(デフォルトは 7 ビット ASCII) [PEP-0263]。 フォーマットは次のとおり。
    # -*- coding: encoding -*-
    標準エンコーディングここ で定義されており、 ISO-8859-1 (aka latin1), iso-8859-15 (latin9), UTF-8 等がある。 すべてのエンコーディングがサポートされている訳ではない。 たとえば、UTF-16 等は未サポートである。
  • 環境設定: sitecustomize.py ファイルが、パス中 (通常 ${PYTHONHOME}/lib/site-packages/ 中) にあれば、自動的に読み込まれる。
  • Tip: Windows での Python スクリプトの起動
    <pythonHome>\python myScript.py args ...
    <pythonHome> が PATH 環境変数にあれば、myScript.py args ... とできる。
    .py;.pyw;.pyc;.pyoPATHEXT 環境変数に加えてあれば、myScript args ... ともできる。

環境変数

環境変数
変数 効果
PYTHONHOME prefix ディレクトリ (prefix;exec_prefix 等) を置き換える。 デフォルトのモジュール検索パスは、prefix/lib
PYTHONPATH モジュールファイルのデフォルト検索パス。フォーマットは、シェルの $PATH と同じく、 ディレクトリへのパス名を ':' または ';' で区切ったもの (コロン・セミコロンの前後には空白を入れない)。
Windows では、レジストリキー HKEY_LOCAL_MACHINE\Software\Python\PythonCore\x.y\PythonPath (デフォルト値) が、まず検索される。 アプリケーションの名前のキーを生成し、アプリケーションの基底ディレクトリを示すデフォルト文字列を指定できる。

さらに、拡張子が .pth を作成し、各行にパスを記述して、Python の検索パスのどこか (site-packages/ が最良)に置くこともできる。 各アプリケーションごとに .pth ファイルを作成すると、アンインストールも容易になる
PYTHONSTARTUP ファイル名が設定されていて読み込み可能であれば、対話モードの プロンプトを表示する前に、ファイル中の Python コマンドを実行する
PYTHONDEBUG 空でない場合、-d オプションと同じ
PYTHONINSPECT 空でない場合、-i オプションと同じ
PYTHONOPTIMIZE 空でない場合、-i オプションと同じ
PYTHONUNBUFFERED 空でない場合、-i オプションと同じ
PYTHONVERBOSE 空でない場合、-d オプションと同じ
PYTHONCASEOK 空でない場合、(imports 時に) ファイル名・モジュール名の大小文字を無視する

主要な字句エレメント

キーワード

        and       del       for       is        raise
        assert    elif      from      lambda    return
        break     else      global    not       try
        class     except    if        or        while
        continue  exec      import    pass      yield
        def       finally   in        print
  • (キーワードの一覧を得るには標準モジュール keyword を使う)
  • トークンとして使えない文字 (文字列中でのみ使用可): $ ? (2.4 より前では @ も)
  • 文は一行で書く。複数行に分ける時は、C プリプロセッサと同様に、"\" を使う。
    ただし、(), [], {} または3重引用符で括ると、複数行に渡って書ける。
  • セミコロン (";") で区切ると複数の文を一行に書ける。
  • コメントは、"#" で始まり、行の最後まで。

識別子

(letter | "_") (letter | digit | "_")*
  • Python の識別子 (identifier) であるキーワードや属性などは、大小文字が 区別 される。
  • 特殊形式: _ident ('from module import *' によりインポートされない)。 __ident__ (システム定義名)。 __ident (クラスプライベートな名前)。

文字リテラル

str (8 ビット/文字の通常の旧式文字列) と unicode (16 ビット/文字の UCS2 文字列) の 2 つの形式がある。

リテラル
"二重引用符に括られた文字列"
'単引用符に括られた文字列。"を内部で使える'
'''3 つの単引用符で括ると、改行文字や単引用符を内部で使える'''
""" 3 つの二重引用符も同様に使える """
u'unicode 文字列'
U"unicode 文字列の別記法"
r'\ が変換されない生文字列。正規表現や windows のパスを書くときに便利'
R"生文字列の別記法"   -- 生文字列は \ では終えられない
ur'unicode の生文字列'
UR"unicode の生文字列の別記法"
  • 文字列が次の行まで続くときは、\ を行末に使う。
  • 連続する文字列は連結される。例、'Monty ' 'Python''Monty Python' と同じ。
  • u'hello' + ' world'  --> u'hello world'   (unicode に強制変換される)

文字リテラルのエスケープ
エスケープ 意味
\改行 無視 (改行文字をエスケープ)
\\ バックスラッシュ (\)
\e エスケープ文字 (ESC)
\v 垂直タブ (VT)
\' 単引用符 (')
\f 改ページ (FF)
\ooo 8進値 ooo
\" 二重引用符 (")
\n 改行 (LF)
\a ベル文字 (BEL)
\r 復帰 (CR)
\xhh 16進値 hh
\b バックスペース (BS)
\t 水平タブ (TAB)
\uxxxx 16 ビットの16 進値 xxxx の文字 (unicode のみ)
\Uxxxxxxxx 32 ビットの16 進値 xxxxxxxx の文字 (unicode のみ)
\N{name} Unicode データベースに示される文字名称 (unicode のみ)。例、 u'\N{Greek Small Letter Pi}' <=> u'\u03c0'.
(逆は、unicodedata モジュールを使い、 unicodedata.name(u'\u03c0') == 'GREEK SMALL LETTER PI')
\他の文字 バックスラッシュを含めてそのまま。例、str('\z') == '\\z'
  • NUL バイト (\000) は、文字列終端のマーカでは ない。文字列中に NUL を含められる。
  • 文字列 (と タプル) は 変更不能 (immutable) である。

ブール定数 (2.2.1 以降)

  • True
  • False

2.2.1 では、True と False は、それぞれ整数の 1 と 0 である。 2.3 以降は、bool という新しい型である。

数値

  • 10進数: 1234, 1234567890546378940L (or l)
  • 8進数 integer: 0177, 0177777777777777777L (begin with a 0)
  • 16進数 integer: 0xFF, 0XFFFFffffFFFFFFFFFFL (begin with 0x or 0X)
  • 整数 (精度制限なし): 1234567890123456L (L または l で終える) または long(1234)
  • 浮動小数点数 (倍精度): 3.14e-10, .001, 10., 1E3
  • 複素数: 1J, 2+3J, 4+5j (J または j で終える。+ で、(浮動小数点数の) 実部と虚部を区切る)

整数と長整数は、2.2 以降、区別 されない (L 接尾辞は不要)。

シーケンス

  • 文字列 (strunicode 型)。長さが 0, 1, 2 の例、(上記 参照)
      '', '1', "12", 'hello\n'
  • タプル (tuple 型) 。長さが 0, 1, 2 の例、
      () (1,) (1,2) # 長さが 0より大きい時は、カッコはオプション
  • リスト (list 型) 。長さが 0, 1, 2 の例、
      [] [1] [1,2]
  • インデックスは 0 から始まる。負値を指定すると(通常)シーケンスの最後からカウントされる。
  • シーケンスのスライス [開始インデックス : 終了インデックス [ : ステップ]] 。 デフォルトは、開始が 0、終了が len(指定したシーケンス)、ステップは 1
      a = (0,1,2,3,4,5,6,7)
      a[3] == 3
      a[-1] == 7
      a[2:4] == (2, 3)
      a[1:] == (1, 2, 3, 4, 5, 6, 7)
      a[:3] == (0, 1, 2)
      a[:] == (0,1,2,3,4,5,6,7) # シーケンスの コピー を生成する
      a[::2] == (0, 2, 4, 6) # 偶数のみ 
      a[::-1] = (7, 6, 5, 4, 3 , 2, 1, 0) # 逆順
    

辞書 (マップ)

長さが 0, 1, 2 の 辞書 (dict 型) の例、 {} {1 : 'first'} {1 : 'first', 'two': 2, key:value}
キーは、ハッシュ値取得可能 な型でなければならない。値は、どんな型でもよい。

演算子とその優先順位

演算子とその優先順位
演算子 説明
  , [...] {...} `...` タプル、リスト、辞書の生成。文字列変換
s[i] s[i:j] s.attr f(...) インデックス指定、スライス、属性、関数コール
+x, -x, ~x 単項演算
x**y べき乗
x*y x/y x%y 乗算、除算、あまり
x+y x-y 加算、引算
x<<y   x>>y ビットシフト
x&y ビット積
x^y ビット排他的論理和
x|y ビット和
x<y  x<=y  x>y  x>=y  x==y x!=y  x<>y
x is y   x is not y
x in s   x not in s
比較、 
同一性、 
構成要素
not x 否定
x and y 論理積
x or y 論理和
lambda args: expr 無名関数
  • 代替名が operator モジュールに定義されている (例、+ に対し __add__add)
  • ほとんどの演算子は オーバーライド可能

基本的な型とその演算子

比較 (すべての 型に対して)

比較
演算子 意味
< より少ない
(1)
<= より少ないか等しい  
> より多い  
>= より多いか等しい  
== 等しい  
!= or <> 等しくない  
is 同一のオブジェクト
(2)
is not 同一のオブジェクトでない
(2)
  • 比較の動作は、クラスに特殊メソッド __cmp__ を 定義してオーバーライドできる。
  • (1) C 言語と異なり、X < Y < Z < W という書き方ができる。
  • (2) オブジェクトのアイデンティティ (すなわち id(object))を比較する。オブジェクトの値を比べるのではない。

None

  • None は、関数の返り値のデフォルト値である。 組み込みオブジェクト NoneType 型。将来、キーワードとなるかもしれない。
  • None と評価されるような入力は、Python を対話的に動作させている時には表示されない。
  • None は、現在のところ 定数 である。 "None" という名の値を作成しようとすると文法エラーとなる。

ブール型 (bool)

ブール型とその演算子
値とその演算子 結果
組み込みの bool(expr) expr が真ならば True。それ以外は False
True, False を見よ
None, 数値としての 0, 空のシーケンス・マップ False  
他の値 True  
not x xFalse なら True 。さもなくば False  
x or y xFalse なら y。さもなくば x
(1)
x and y xFalse なら x。さもなくば y
(1)
  • ブール演算の動作は、特殊メソッド __nonzero__ を定義してオーバーライドできる。
  • (1) 第 2 引数は、結果を求めるのに必要な時だけ評価される

数値型

浮動小数点数、整数、長整数、10進数

  • 浮動小数点数 (float 型) は C 言語の double として解釈される。
  • 整数 (int 型) は C 言語の long (符号付 32 ビット、 最大値は sys.maxint) として解釈される。
  • 長整数 (long 型) は、サイズ制限はない (ただし、システムリソースには制限される)。
  • 2.2 より、整数と長整数とは 区別されない (L 接尾辞は不要)。 int() は、 long 整数を返す。 OverflowError を送出することはない。. オーバーフローしそうな演算、たとえば 2<<32 などでも、 FutureWarning は送出されず、長整数が返される。
  • 2.4以降、 Decimal という新しい型が導入され (モジュール decimal 参照)、 分数計算などで起きる浮動小数点演算上の制限を回避できる。 浮動小数点数と異なり、10 進数は正確な表現ができ、計算時の正確性が保たれる。 精度は、Context 型を使ってユーザ設定できる [PEP 327]。

数値型に対する演算子

数値型に対する演算子
演算子 結果
abs(x) x の絶対値
int(x) x を整数に変換
long(x) x を長整数に変換
float(x) x を浮動小数点数に変換
-x x の符号を反転
+x x に変化なし
x + y xy との和
x - y xy との差
x * y xy との積
x / y x 割る y の正確な除算。 1/2 -> 0.5 (1)
x // y 切り捨て除算。 1//2 -> 0 (1)
x % y x / y の剰余
divmod(x, y) (x/y, x%y) というタプル
x ** y xy 乗 (pow(x,y) と同じ)
  • (1) ただし、from __future__ import division として有効化しないと、/ も切り捨て除算を行う。
  • これらの演算子を再定義するには、クラスの __truediv____floordiv__ メソッドをオーバーライドする。

整数・長整数に対するビット演算子

ビット演算子
演算子 結果
~x x の各ビットを反転
x ^ y xy とのビットごとの排他的論理和
x & y xy とのビット積 (ビットごとの and)
x | y xy とのビット和 (ビットごとの or)
x << n xn ビット左シフト
x >> n xn ビット右シフト

複素数

  • complex 型により、マシンレベルの倍精度浮動小数点数の組として表現される。
  • 複素数 z の実部と虚部はそれぞれ z.real , z.imag で得られる。

数値に関する例外

TypeError
非数値に対して数値演算を行った
OverflowError
数値の限界を超えた
ZeroDivisionError
割算・剰余演算で 0 で割った

シーケンス (リスト・タプル・文字列) の演算

シーケンス型の演算
演算子 結果
x in s sx と等しい要素があるとき True。それ以外で False
(3)
x not in s sx と等しい要素があるとき False。それ以外で True
(3)
s1 + s2 s1s2 を連結する  
s * n, n*s sn 個連結する
 
s[i] si 番目の要素。基点は 0
(1)
s[i: j]
s[i: j:step]
si 番目の要素から to j 番目の1つ手前の要素までをスライスする。 step 値はオプションで、負の値にもできる (デフォルトは 1)
(1), (2)
len(s) s の長さ  
min(s) s の最小の要素
 
max(s) s の最大の要素
 
reversed(s) [2.4] s についての イテレータ で、順序を逆としたものを返す。 ここで s はシーケンス。イテレータではない (reversed(list(s)) とする)。 [PEP 322]
 
sorted(iterable [, cmp]
  [, cmp=cmpFct]
  [, key=keyGetter]
  [, reverse=bool])
[2.4] インプレースで動作する list.sort() と同様だが、 iterable 引数から 新しく 生成したリストをソートする
 
注 :
  • (1) ij が負のとき、インデックスは文字列の最後から勘定される。 つまり len(s)+i や len(s)+j の値が使われる。ただし、-0 は 0 のまま。
  • (2) si から j までのスライスとは、インデックス ki<= k < j である要素のシーケンスと定義される。
    ij が len(s) より大きいときは、len(s) が使われる。 j を省略すると len(s) が使われる。ij 以上だと、スライスの結果は空となる。
  • (3) 2.3 以前では、文字列に対しては、x が 1 つの文字でなければならない。 2.3 以降は、x in s は、x が s の 部分文字列 であるとき真になる。

変更可能なシーケンス (list 型) の演算

変更可能なシーケンスの演算
演算子 結果
s[i] =x s の第 i 要素を x に置換する  
s[i:j [:step]] = t si から j までのスライスを t に置換する  
del s[i:j[:step]] s[i:j] = [] と同じ  
s.append(x) s[len(s) : len(s)] = [x] と同じ  
s.extend(x) s[len(s) : len(s)] = x と同じ
(5)
s.count(x) s の要素で x と等しいものの個数を返す  
s.index(x[, start[, stop]]) s[i]==x となる 最小の i を返す。 startstop を指定すると検索範囲をリストの一部に制限できる。
(1)
s.insert(i, x) i>= 0 なら、s[i:i] = [x] と同じ i == -1 とすると最後の要素の 手前に 挿入される。  
s.remove(x) del s[s.index(x)] と同じ
(1)
s.pop([i]) x = s[i]; del s[i]; return x と同じ
(4)
s.reverse() s の要素をインプレイスで反転する
(3)
s.sort([cmp ])
s.sort([cmp=cmpFct]
  [, key=keyGetter]
  [, reverse=bool])
s の要素をインプレイスでソートする
(2), (3)
  • (1) xs 中に見つからなければ、ValueError 例外が送出される。
  • (2) sort() メソッドは、オプションの引数 cmp に比較関数を指定できる。この関数は 引数を 2 つ取り、 第 1 引数が第 2 引数に比べ、小さいとき -1、等しいとき 0、大きいとき 1 を返す。 比較関数を指定すると、ソートがとても遅くなるので注意すること。 2.4 以降、cmp はキーワード引数として指定できる。 さらに、2 つのキーワードが追加された。 key は、リストの要素を受けて、比較に使うキーを返す関数である (cmp より 速い )。 reverse は、True を指定すると比較の意味を逆転させる。
    Python 2.3 (?) 以降、 ソートの 「安定」 が保障されている。つまり、2 つの要素の比較キーが同じならば、 入力時と同じ順で返される。たとえば、まず人のリストを名前でソートしてから年齢でソートしたとする。 その結果は、同じ年齢の人については名前でソートされた状態となる。
  • (3) sort()reverse() メソッドは、リストを インプレース変更 し、 ソートされたリストは返されない。大きなリストを扱うときのリソース節約のためである。この副作用に注意すること。
  • (4) pop() メソッドは、リスト以外の変更可能なシーケンスには適用できない。 i 引数のデフォルト値は -1で、最後の要素が削除され、返される。
  • (5) x がリストオブジェクトでなければ TypeError が送出される。

辞書/マップ (dict 型) の演算

マップの演算
演算子 結果
len(d) d の要素数を返す  
dict()
dict(**kwargs)
dict(iterable)
dict(d)
空の辞書を作成する。
キーワード引数 kwargs で初期化した辞書を作成する。
iterable から得られる (キー, 値) の組で初期化した辞書を作成する。
辞書 d のコピーを作成する
 
d.fromkeys(iterable, value=None) iterator から得られるキーを元に辞書を作成し、値を value に設定する  
d[k] d の要素で、キーが k のもの
(1)
d[k] = x d[k] を x にする  
del d[k] d[k] を d から削除する
(1)
d.clear() 全要素を d から削除する  
d.copy() d の(浅い)コピーを返す  
d.has_key(k)
k in d
d にキー k があれば True、さもなくば False  
d.items() d の (キー, 値) というペアを要素とするリストを返す
(2)
d.keys() d のキーのリストを返す
(2)
d1.update(d2) for k, v in d2.items(): d1[k] = v
2.4 以降、 キーワード引数 update(**kwargs) と イテレータ update(iterable) も使える
d.values() d の値のリストを返す
(2)
d.get(k, defaultval) d から、キー k の値を返す
(3)
d.setdefault(k[,defaultval]) キー kd にあれば d[k] を返す。さもなくば、 defaultvalを (値に設定した上で) 返す
(4)
d.iteritems() (キー, 値)ペアに対する イテレータ を返す  
d.iterkeys() キー列に対する イテレータ を返す  
d.itervalues() 値列に対する イテレータ を返す  
d.pop(k[, default]) キー k を削除した上で、その値を返す。 そのキーが無ければ、 指定されていれば default を返し、さもなくば KeyError を送出する  
d.popitem() d の (key, value) ペアのどれかを、削除した上で返す
 
  • キーにアクセス不能のときは TypeError が送出される。
  • (1) キー k がマップに無い場合は KeyError が送出される。
  • (2) キーと値は、ランダムな順で並ぶ。
  • (3) キー k がマップに無くとも例外は送出されず、defaultval が返される。 defaultval はオプションで、これが指定されずかつ k がマップに無いときは None が返される。
  • (4) キー k がマップに無くとも例外は送出されず、defaultval が返され、 キー k が値を defaultVal として追加される。defaultval はオプションで、 これが指定されずかつ k がマップに無いときは None が返され、マップに追加される。

文字列 (str 型・unicode 型) の演算

次の文字列メソッドは、string モジュールの関数を(ほぼすべて) 置き換えたものである。
str 型と unicode 型の基底クラスはいずれも basestring 型。
文字列演算
演算子 結果
s.capitalize() s の最初の文字を大文字にした文字列を返す  
s.center(width) width の長さに対し、s を中央寄せした文字列を返す
(1)
s.count(sub[ ,start[,end]]) s 中に部分文字列 sub が出現する回数を返す
(2)
s.decode([ encoding[,errors]]) 指定されたコーデック(文字エンコード)でデコードされたユニコード文字列を返す。 ファイルや、str 型の文字列だけを処理するような入出力関数を使ったの読み込みに有用である。 encode の逆動作である
(3)
s.encode([ encoding[,errors]]) s をエンコードした str 型の文字列を返す。 (入出力関数が str 型しか処理できないので)出力やファイルへの書き込みを行う際に、 ユニコード文字列を str 型へエンコードするのに良く使われる。 例、 u'légère'.encode('utf8')。 zip (codec 'zip') や uuencode (codec 'uu') など str 型を str 型にエンコードする のにも使われる。decode の逆動作である
(3)
s.endswith(suffix [,start[,end]]) ssuffix で終わっていれば True を返す。さもなくば、False を返す
(2)
s.expandtabs([ tabsize]) s 中のタブをスペースに変換した文字列を返す
(4)
s.find(sub[ ,start[,end]]) s 中で部分文字列 sub が見つかった最小のインデックス値を返す。 見つからなければ -1 を返す
(2)
s.index(sub[ ,start[,end]]) find() と同様だが、見つからなければ ValueError を送出する
(2)
s.isalnum() s の文字がすべて英数字であれば True を返す。さもなくば False を返す
(5)
s.isalpha() s の文字がすべて英字であれば True を返す。さもなくば False を返す
(5)
s.isdigit() s の文字がすべて数字であれば True を返す。さもなくば False を返す
(5)
s.islower() s の文字がすべて小文字であれば True を返す。さもなくば False を返す
(6)
s.isspace() s の文字がすべて空白文字であれば True を返す。さもなくば False を返す
(5)
s.istitle() s の文字がすべてタイトルケース(各単語の始めが大文字)であれば True を返す。 さもなくば False を返す
(7)
s.isupper() s の文字がすべて大文字であれば True を返す。さもなくば False を返す
(6)
separator.join(seq) シーケンス seq の文字列を、文字列 separator で区切った形式で連結した文字列を返す。 例、 ",".join(['A', 'B', 'C']) -> "A,B,C"
 
s.ljust/rjust/center(width[, fillChar=' ']) s を左寄せ/右寄せ/中央寄せした、長さが width の文字列を返す
(1), (8)
s.lower() s を小文字に変換した文字列を返す
 
s.lstrip([chars] ) s の先頭にある chars (デフォルトは空白文字) を削除する
 
s.replace(old, new[, maxCount =-1]) s 中の部分文字列 old の先頭 maxCount 個 (-1のとき制限なし)を new に変換した文字列を返す
(9)
s.rfind(sub[ , start[, end]]) s 中で部分文字列 sub が見つかった最大のインデックス値を返す。 見つからなければ -1 を返す
(2)
s.rindex(sub[ , start[, end]]) rfind() と同様だが、見つからなければ ValueError を送出する
(2)
s.rstrip([chars]) s の最後にある chars (デフォルトは空白文字) を削除する。e.g. aPath.rstrip('/') will remove the trailing '/'from aPath if it exists
 
s.split([ separator[, maxsplit]]) sseparator を区切り文字として分解した文字列のリストを返す
(10)
s.rsplit([ separator[, maxsplit]]) splitと同様だが、文字列の最後から分解する
(10)
s.splitlines([ keepends]) s を改行で分解し、各行からなるリストを返す
(11)
s.startswith(prefix [, start[, end]]) sprefix で始まっていれば True を返す。さもなくば False を返す。 負値も startend に使える
(2)
s.strip([chars]) s の先頭と最後にある chars (デフォルトは空白文字) を削除する
 
s.swapcase() s の大文字と小文字を入れ替えた文字列を返す
 
s.title() s をタイトルケース化した、つまり各単語の始めを大文字とし残りを小文字とした、文字列を返す。
 
s.translate(table [, deletechars]) s をテーブル table を使って置換した文字列を返す
(12)
s.upper() s を大文字に変換した文字列を返す
 
s.zfill(width) 長さ width の、先頭を 0 詰めした文字列を返す  
  • (1) パディングは、スペースまたは指定した文字を使って行われる。
  • (2) オプション引数 start を指定すると、s[start:] が処理される。オプション引数 startend の双方を指定すると、 s[start:end] が処理される。
  • (3) デフォルトのエンコーディングは、 sys.getdefaultencoding()で、 sys.setdefaultencoding() により変更できる。オプション引数 errors を指定して、 別のエラー処理スキームを設定できる。errors 引数のデフォルトは 'strict'で、 エンコーディング関連エラーはにより ValueError が送出される。他に、'ignore' または 'replace' を指定できる。モジュール codecs を見よ。
  • (4) オプション引数 tabsize を指定しないと、タブ幅は 8 文字が設定される。
  • (5) s が文字を1つ以上含んでいないと、False が返される。
  • (6) s が対象とする文字を1つ以上含んでいないと、False が返される。
  • (7) タイトルケースな文字列とは、大文字は非英字の後だけにあり、小文字は英字の後だけにあるという文字列のこと。
  • (8) widthlen(s) より小さいと s が返される。
  • (9) オプション引数 maxCount を指定すると、先頭から maxCount 個だけが置換される。
  • (10) separator を指定しない None を指定すると、すべての空白文字がセパレータとなる。 maxsplit を指定すると、分解が最大 maxsplit 回まで行われる。
  • (11) keepends に真と評価されうる値を指定しない限り、返される結果には改行文字は含まれない。
  • (12) table は、長さ 256 の文字列とする。オプション引数 deletechars に指定した文字は、変換に先立って削除される。

% 演算子による文字列のフォーマット

formatString % args --> 文字列を返す
  • formatString〔フォーマット文字列〕は、通常のテキストに C 言語の printf の 型指定子 を埋め込んだもの。
    %[flag][width][.precision] formatCode
    ここで formatCode は c, s, i, d, u, o, x, X, e, E, f, g, G, r, % のどれか (下記参照)。
  • flag 文字は -, +, blank, # と 0 (下記参照
  • widthprecision* とすると、幅値や精度値は args から 設定される。例を示す。
    フォーマット文字列 結果
    '%3d' % 2 ' 2'
    '%*d' % (3, 2) ' 2'
    '%-3d' % 2 '2 '
    '%03d' % 2 '002'
    '% d' % 2 ' 2'
    '%+d' % 2 '+2'
    '%+3d' % -2 ' -2'
    '%- 5d' % 2 ' 2 '
    '%.4f' % 2 '2.0000'
    '%.*f' % (4, 2) '2.0000'
    '%0*.*f' % (10, 4, 2) '00002.0000'
    '%10.4f' % 2 ' 2.0000'
    '%010.4f' % 2 '00002.0000'
  • %s は、すべての型の引数を文字列に変換する (str() 関数が使われる) 。
  • args には、タプルも指定できる。
    '%s has %03d quote types.' % ('Python', 2)  == 'Python has 002 quote types.'
  • % の右側には マップ を指定できる。
    a = '%(lang)s has %(c)03d quote types.' % {'c':2, 'lang':'Python'}
    (右側に vars() 関数を使うのも便利である)

型指定子
formatCode 意味
d 符号付き10進整数
i 符号付き10進整数
o 符号なし8進数
u 符号なし10進数
x 符号なし16進数 (小文字)
X 符号なし16進数 (大文字)
e 浮動小数点数の指数表示 (小文字)
E 浮動小数点数の指数表示 (大文字)
f 浮動小数点数の10進表示
F 浮動小数点数の10進表示
g 指数が -4 未満か precision 以上のとき "e"、さもなくば "f" と同じ
G 指数が -4 未満か precision 以上のとき "E"、さもなくば "F" と同じ
c 単一文字 (整数値または単一文字の文字列をとる)
r 文字列 (オブジェクトを repr() を使って変換したもの)
s 文字列 (オブジェクトを str() を使って変換したもの)
% 引数の変換はせず、"%" 文字自体が結果に返る (完全な表記は %%)
文字変換フラグ
flag 意味
# 「別形式」を使って値変換する
0 0 埋めする
- 左寄せする
  (空白文字) 。正の値(または空白文字)の前に空白文字を置く
+ 正負記号 ("+" または "-") を前に付ける(空白文字フラグより優先される)

テンプレート文字列

2.4 以降 [PEP 292]string モジュールに、変数を テンプレート 文字列中の変数を置換する新たな機能が追加された。
置換対象となる変数は $ で始める。実際の値は、substitute または safe_substitute メソッドに辞書で指定する(〔テンプレート中に記述した〕キーが〔指定した辞書に〕ない場合、 substituteKeyError 例外を送出する。 safe_substitute は、〔キーが無いことを〕無視する)。

  t = string.Template('Hello $name, you won $$$amount') # (note $$ to literalize $)
  t.substitute({'name': 'Eric', 'amount': 100000}) # -> u'Hello Eric, you won $100000'

ファイルオブジェクト

(file 型)。 組み込み関数 open() [推奨] やそのエイリアス file() から生成される。 他のモジュールの関数からも生成される。
ファイル名を引数に取る/返す関数 (open, os.listdir, など...) はすべて Unicode ファイル名をサポートする。

ファイルオブジェクトの演算

ファイルの操作
演算 結果
f.close() ファイル f をクローズする
f.fileno() ファイル f のファイル記述子 (fd) を取得する
f.flush() ファイルの f の内部バッファをフラッシュする
f.isatty() ファイル f が tty (または類似の) デバイスに接続されていれば 1 を、さもなくば 0 を返す
f.next() Returns the next input line of file f, or raises StopIteration when EOF is hit. Files are their own iterators. next is implicitely called by constructs like for line in f: print line.
f.read([size]) ファイル f から最大 size バイトを読み込み、文字列オブジェクトを返す。 size を指定しないと、EOF まで読む
f.readline() ファイル f から 1 行読み込む。行の末尾の改行文字は残す。ただし、EOF は残さない。Return '' on EOF.
f.readlines() readline() で EOF まで読み、行のリストを返す
f.xreadlines() ファイル全体をメモリに読み込まないでファイルの各行を読み込むような シーケンス類似のオブジェクトを返す。 2.2 以降では、 for line in f を使う (下記参照)
for line in f: do something... (readline を使って) ファイルの各行をイテレートする
f.seek(offset[, whence=0]) ファイル f の位置を設定する。stdio の fseek() と同じ。
whence == 0 のとき絶対位置指定。
whence == 1 のとき現在位置からの相対指定。
whence == 2 のときファイルの末尾からの指定
f.tell() ファイル f の現在位置を返す (バイトオフセット)
f.truncate([size]) Truncate f's size. If size is present, f is truncated to (at most) that size, otherwise f is truncated at current position (which remains unchanged).
f.write(str) 文字列をファイル f に書き込む
f.writelines(list) 文字列のリストをファイル f に書き込む。EOL は追加しない

ファイル関連の例外

EOFError
読み込み中に End-of-file にヒットした (多数回送出されうる。たとえば f が tty のとき)
IOError
他の I/O 操作に失敗した

set(集合)型

2.4 で、C で実装された新たな 2 つの 組み込み型 setfrozenset (変更不能な set) が追加された [PEP 218]。 これら set 型は、順番の無いユニークな要素の集合である。要素はハッシュ可能でなければならない。 frozensets 型はハッシュ可能である(つまり、他の set の要素となれる)。 一方、set 型はそうではない。いずれも、イテレート可能 である。

2.3 では、sets モジュールにおいて、 Set クラスと ImmutableSet クラスが使用できる。 このモジュールは、2.4 の標準ライブラリに残されており、 組み込み型とあわせ使用できる。
主な Set 型の演算子
演算子 結果
set/frozenset([iterable=None]) [using built-in types] Builds a set or frozenset from the given iterable (default: empty), e.g. set([1,2,3]), set("hello").
Set/ImmutableSet([iterable=None]) [using the sets module] Builds a Set or ImmutableSet from the given iterable (default: empty), e.g. Set([1,2,3]).
len(s) Cardinality of set s.
elt in s / not in s True if element elt belongs / does not belong to set s.
for elt in s: process elt... Iterates on elements of set s.
s1.issubset(s2) True if every element in s1 is in s2.
s1.issuperset(s2) True if every element in s2 is in s1.
s.add(elt) Adds element elt to set s (if it doesn't already exist).
s.remove(elt) Removes element elt from set s. KeyError if element not found.
s.clear() Removes all elements from this set (not on immutable sets!).
s1.intersection(s2) or s1&s2 Returns a new Set with elements common to s1 and s2.
s1.union(s2) or s1|s2 Returns a new Set with elements from both s1 and s2.
s1.difference(s2) or s1-s2 Returns a new Set with elements in s1 but not in s2.
s1.symmetric_difference(s2) or s1^s2 Returns a new Set with elements in either s1 or s2 but not both.
s.copy() Returns a shallow copy of set s.
s.update(iterable) Adds all values from iterable to set s.

日付と時刻

Python には、固有の日付型や時刻型は ない が、〔日付と時刻に関する〕組み込みモジュールが 2 つある。
  • time: 時刻の取得と変換
  • datetime: date, time, datetime, timedelta および tzinfo クラス

サードパーティのモジュール mxDateTime も見よ。

その他の型

- 詳細はマニュアルを見よ -
  • Module オブジェクト
  • Class オブジェクト
  • Class instance オブジェクト
  • Type オブジェクト (see module: types)
  • File オブジェクト (上記参照)
  • Slice オブジェクト
  • Ellipsis オブジェクト, used by extended slice notation (unique, named Ellipsis)
  • Null オブジェクト (unique, named None)
  • XRange オブジェクト
  • コール可能な
    • ユーザ定義 (Python で記述)
      • User-defined Function オブジェクト
      • User-defined Method オブジェクト
    • 組み込み (C で記述)
      • 組み込み Function オブジェクト
      • 組み込み Method オブジェクト
  • 内部
    • Code オブジェクト (byte-compile executable Python code: bytecode)
    • Frame オブジェクト (execution frames)
    • Traceback オブジェクト (stack trace of an exception)


結果
pass 何もしない
del name[, name]* name とオブジェクトの結びつけを解除する。オブジェクトは、他から参照されていないなら、 派生的に (また自動的に) 削除されることとなる
print[>> fileobject,] [s1 [, s2 ]* [,] 指定されていれば fileobjectに、さもなくば sys.stdout に出力する。 文が カンマ で終わっていないときは、改行文字が付けられる。Python が対話モードの際は、 print 文は不要で、表現が何か入力されるとその値を、None で無い限り、出力する。
exec x [in globals [, locals]] 指定した名前空間中の x を実行する。デフォルトは現在の名前空間。 x は、文字列・ファイルオブジェクト・ 関数オブジェクトのどれか。locals には、通常の Python の辞書型以外のマップ型も使える。
callable(value,... [id=value] , [*args], [**kw]) 関数 callable を引数を与えてコールする。引数は、名前指定で渡せる。また、デフォルト値が設定されていれば、省略できる。 たとえば callable の定義が "def callable(p1=1, p2=2)" のとき、次のようになる。
"callable()" <=> "callable(1, 2)"
"callable(10)" <=> "callable(10, 2)"
"callable(p2=99)" <=> "callable(1, 99)"
*args は、引数と 位置 でもって対応したタプル。
**kw は、引数と キーワード でもって対応したタプル。

代入演算

代入演算
演算子 結果
Notes
a = b 基本的な代入 - オブジェクト b をラベル a へ代入するS
(1)(2)
a += b a = a + b とほぼ同じ
(3)
a -= b a = a - b とほぼ同じ
(3)
a *= b a = a * b とほぼ同じ
(3)
a /= b a = a / b とほぼ同じ
(3)
a //= b a = a // b とほぼ同じ
(3)
a %= b a = a % b とほぼ同じ
(3)
a **= b a = a ** b とほぼ同じ
(3)
a &= b a = a & b とほぼ同じ
(3)
a |= b a = a | b とほぼ同じ
(3)
a ^= b a = a ^ b とほぼ同じ
(3)
a >>= b a = a >> b とほぼ同じ
(3)
a <<= b a = a << b とほぼ同じ
(3)
  • (1) タプルやリスト・文字列を分解できる。
    first, second = l[0:2]    # first=l[0]; second=l[1] と同じ
    [f, s] = range(2)    # f=0; s=1 と同じ
    c1,c2,c3 = 'abc'    # c1='a'; c2='b'; c3='c' と同じ
    (a, b), c, (d, e, f) = ['ab', 'c', 'def']    # a='a'; b='b'; c='c'; d='d'; e='e'; f='f' と同じ
    Tip: x,y = y,x は、 xy を入れ替える
  • (2) 複数の代入ができる。
    a = b = c = 0
    list1 = list2 = [1, 2, 3]    # list1 と list2 は 同じ リストになる
  • (3) 完全に同じではない。 a は一度だけ評価される。また、可能であれば、 演算はインプレイスで行われる。つまり a は、置き換えられるのではなく、自ら変更することになる。

制御文

制御文
結果
if condition:
  suite
[elif condition:   suite]*
[else:
  suite]
一般的な if/else 文
while condition:
  suite
[else:
  suite]
一般的な while 文。ループから break で抜けたとき以外は、 else suite を実行する
for element in sequence:
  suite
[else:
  suite]
sequence に対して、その各要素を element に代入して、繰り返しを行う。 繰り返しを単に何回か行いたいときは、組み込みの range 関数を使う。 ループから break で抜けたとき以外は、 else suite を実行する
break 即座に for または while ループから抜ける
continue 即座に for または while のループの次の繰り返しを行う
return [result] 関数(またはメソッド)から抜け、result を返す (複数の値を返すときは、 tuple を使う)。 result を指定しなければ、None が返る
yield expression (generator 関数の内部で、 try..finally の外でだけ使う)。 expression を評価した結果を返す

例外文

例外文
結果
assert expr[, message] expr を評価し、偽なら AssertionError をメッセージと共に送出する。 2.3 以前では、__debug__ が 0 のとき使えない
try:
  suite1
[except [exception [, value]:
  suite2]+
[else:
  suite3]
suite1 の文を実行し、例外が送出されたら、except 節で例外マッチングを行う。 exception とマッチするか、exception を指定していないとき、 その節の suite2 を実行する。例外が送出されなければ、 suite1 に続いて else 節の suite3 を実行する。exception の値は、 変数 value に代入される。exception は例外の タプル でもよい。例、 except(KeyError, NameError), e: print e
try:
  suite1
finally:
  suite2
suite1 の文を実行し、例外が送出されなければ、suite2 を実行する (たとえ suite1 から returnbreak , continue で 抜けた場合も)。例外が送出されたら、suite2 を実行し、例外を再送出する
raise exceptionInstance Exception を継承したエラークラスのインスタンスを送出する。(望ましい 例外送出方法)
raise exceptionClass [, value [, traceback]] 指定した例外クラス exceptionClass を、オプション値 value を設定し、送出する。 traceback 引数には、例外のバックトレースを出力するトレースバックオブジェクトを指定する
raise 引数なしの raise 文は、現在の関数内の直近の例外を再送出する
  • 例外は 例外クラスインスタンス である (2.0 以前では通常の 文字列 とできる)
  • 例外は、定義済みのクラス Exception を継承しなければならない。例、
    class TextException(Exception): pass
    try:
    if bad:
    raise TextException()
    except Exception:
    print 'Oops' # This will be printed because TextException is a subclass of Exception
  • 処理がなされない例外についてはエラーメッセージが出力される。まず、クラス名が出力され、 コロン・スペースと続き、組み込み関数 str() で例外のインスタンスを文字列に変換したものが出力される
  • すべての組み込み例外は(Exception を継承した)StandardError を継承している。

名前空間文

インポートするモジュールファイルは、Python パス (sys.path) に設定されたディレクトリに置かなければならない。 2.3 以降、zip ファイルにまとめることも可能 [例、 sys.path.insert(0, "aZipFile.zip")]。

パッケージ (>1.5): パッケージ は、名前空間の1種で、モジュール本体と初期化モジュール __init__.py を含むディレクトリ(空も可)に結びつけるもの。
パッケージのディレクトリはネストできる。モジュール表記は次の様になる。 [package.[package...].module.symbol
[1.51: On Mac & Windows, the case of module file names must now match the case as used in the import statement]

名前空間文
結果
import module1 [as name1] [, module2]* モジュールをインポートする。モジュールの内容は、 [パッケージ.]モジュール名 を前に付けて参照する。例、
import sys; print sys.argv
import package1.subpackage.module
package1.subpackage.module.foo()
name1 を指定すると、その名前で module1 を呼べる。
from module import name1 [as othername1][, name2]* モジュール module から現在の名前空間に指定した名前をインポートする。
from sys import argv; print argv
from package1 import module; module.foo()
from package1.module import foo; foo()
othername1 を指定すると、その名前で name1 を呼べる。
[2.4] from module import names 文で名前のリストをカッコで括れる (PEP 328).
from module import * moduleすべての 名前をインポートする。ただし、"_" で始まるものは除く。 常用しないこと。名前の衝突に注意。
from sys import *; print argv
from package.module import *; print x
モジュールのトップレベルでのみ使用可能。
module__all__ 属性を定義しているなら、__all__ にリストされている 名前だけをインポートする。

注、 "from package import *" は、パッケージに含まれるモジュールではなく、 そのパッケージの __init__.py ファイルに定義されているシンボルだけをインポートする
global name1 [, name2] 指定した名前を、ローカル (通常は関数) なものでなく、グローバルスコープ (通常はモジュール) のものとする。
たとえば、関数中で global 文がなく、"x" はその関数中で使われていないとする。
- "x" を読み込もうとすると、 NameError
- "x" に書き込もうとすると、 関数ローカルの "x" を生成
"x" は関数中で定義されていないが、モジュールで定義されている。
- "x" を読み込もうとすると、モジュールから値を取得する
- "x" に書き込もうとすると、 関数ローカルの "x" を生成
ただし "x[0]=3" は "x" の検索を行い、ローカルでなくグローバルの "x" を使う

関数定義

def funcName ([paramList]):
suite
関数オブジェクトを生成し、名前 funcName に代入する。
paramList ::= [param [, param]*]
param ::= value | id=value | *id | **id
  • 値が 〔仮〕引数に渡される。よって、変更可能な オブジェクトについてのみ、 〔実〕引数の値を〔関数内から〕変更できる(つまり、入出力変数(inout parameters)とできる)。
  • return を使うと、関数から戻れる(この場合、None を返す)。 return value とすると value を返して戻る。 複数の値を返すには、return 1,2,3 のように タプル を使う。
  • キーワード 引数 arg=value を使って デフォルト値 を定義できる(デフォルト値は、関数定義時に評価される) 。foo(x, y=1, s='') のように 変数リストの後ろに記述する。
  • 任意引数 *args は、記述位置以降の非キーワード引数のタプルをとる。 例、def foo(x, *args): ...foo(1, 2, 3) とコールすると args(2,3) となる。
  • 任意引数 **kwargs は、余分なキーワード引数と対応する辞書をとる。 例、def foo(x, **kwargs): ...foo(1, y=2, z=3) とコールすると、 kwargs{'y':2, 'z':3} となる。def foo(x, *args, **kwargs): ...foo(1, 2, 3, y=4, z=5) をコールすると、args(2, 3) となり kwargs{'y':4, 'z':5} となる。
  • argskwargs は、この名前とすることが慣習であるが、他の名前とすることもできる。
  • *args**kwargs を(個別に、または同時に)「転送する」こともできる。
    def f1(x, *args, **kwargs):
      f2(*args, **kwargs)
  • 無名関数 (lambdas) も見よ。

クラス定義

class className [(super_class1[, super_class2]*)]:
  suite

関数オブジェクトを生成し className という名前に代入する。
suite には、ローカルのクラスメソッドの定義と、クラス属性への代入を記述できる。

class MyClass (class1, class2): ...
class1 と class2 とを継承したクラスオブジェクトを生成する。 その新しいクラスオブジェクトを名前 MyClass に代入する。

class MyClass: ...
基底 クラスオブジェクト (何も継承しないクラス) を生成する。 その新しいクラスオブジェクトを名前 MyClass に代入する。

class MyClass (object): ...
新形式 クラスobject を継承するクラスは 新形式 クラスとなる。2.2 以降で利用できる) を生成する。その新しいクラスオブジェクトを名前 MyClass に代入する。

  • クラス インスタンス メソッドの第 1 引数は、そのメソッドでの操作対象となるインスタンスオブジェクトとする。 'self' とするのが慣習である。
  • インスタンスの生成時に、特殊静的メソッド __new__(cls[,...]) がコールされる。 第 1 引数はクラスで、他の引数は __init__() と同じである。詳細は こちら
  • 特殊メソッド __init__() が、インスタンスの生成時にコールされる。
  • 特殊メソッド __del__() が、オブジェクトへの参照がなくなったときにコールされる。
  • インスタンスの生成は、クラスオブジェクトを 「コールする」ことで行う。引数指定もできる (つまり instance=apply(aClassObject, args...) とするとインスタンスが生成される) 。
  • 2.2 以前では、リストや辞書などの組み込みのクラスのサブクラスを直接作ることはできない (UserDict や UserList モジュールを使って「ラップする」ことが必要)。2.2 以降は 直接サブクラスを作れる (Types/Classes unification を見よ)。

class c (c_parent):
def __init__(self, name):
self.name = name
def print_name(self):
print "I'm", self.name
def call_parent(self):
c_parent.print_name(self)

instance = c('tom')
print instance.name
'tom'
instance.print_name()
"I'm tom"

親クラスにアクセスするは、そのメソッドを直接コールし、"self" を明示的に指定する (上記例の call_parent メソッドを見よ)。
数値演算子やシーケンス、マップインデックスなどを実装する特殊メソッドが利用できる。

型とクラスの統一

基本的型 である int, float, str, list, tuple, dictfile は、2.2 以降、 基底クラスオブジェクトを継承したクラスとして動作する。その継承もできる。
x = int(2) # 組み込みのキャスト関数は、基本的型のコンストラクタである
y = 3  # <=> int(3) (リテラルは新しい基本的型のインスタンスである)
print type(x), type(y) # int, int
assert isinstance(x, int) # replaces isinstance(x, types.IntType)
assert issubclass(int, object) # base types derive from base class 'object'.
s = "hello" # <=> str("hello")
assert isinstance(s, str) f = 2.3 # <=> float(2.3) class MyInt(int): pass # may subclass base types x,y = MyInt(1), MyInt("2") print x, y, x+y # => 1,2,3 class MyList(list): pass l = MyList("hello") print l # ['h', 'e', 'l', 'l', 'o']
新しいスタイル のクラスは object を継承している。 古いスタイル のクラスは継承していない。

ドキュメンテーション文字列

モジュール・クラス・関数には、説明文を記述できる。それは、 それらの内容の先頭部分に文字列リテラルを記述することで行う。この説明文は、 モジュール・クラス・関数内において '__doc__' 属性で取得できる。

class C:
    "A description of C"
        def __init__(self):
            "A description of the constructor"
            # etc.
            
c.__doc__ == "A description of C".
c.__init__.__doc__ == "A description of the constructor"

イテレータ

  • イテレータ は、オブジェクトの 1 種で、 ある 集合 の要素を列挙するものである。メソッドは、next() という 1 つだけで、 次の要素を返す、または StopIteration を送出する。
  • あるオブジェクト obj のイテレータは、組み込み関数 iter(obj) で取得できる。この関数は、obj.__class__.__iter__() をコールする。
  • 各集合は、__iter__()next() とを実装した 独自の イテレータを持っている。
  • 組み込みの集合 (リスト・タプル・文字列・辞書) は、 __iter__() を実装している。辞書型(マップ型)は、そのキーを列挙する。 ファイル型は、その各行を列挙する。
  • イテレータから リスト または タプル を生成できる。例、 list(anIterator)
  • ループ が行われるとき、イテレータが暗黙的に使われる。
    • for elt in collection:
    • if elt in collection:
    • タプルの代入: x,y,z= collection

ジェネレータ

  • ジェネレータ (generator) は、関数の1種で、複数回のコールに渡って状態を維持し コールのたびに 新たな 値を生成する。yield キーワードを使って コール毎に(1つづつ)値を返す。return または StopIteration() 送出により、値の列挙の終了を通知する。
  • 典型的な使用目的は、IDや名前一覧・シリアル番号などの生成である。 Fancier applications like nanothreads are also possible.
  • ジェネレータの使用方法: ジェネレータ関数 をコールして ジェネレータ・オブジェクトを取得する。ついで〔そのジェネレータオブジェクトを〕 generator.next() とコールすると次の値が得られる。StopIteration が送出されるまで繰り返しコールする。
  • 2.4 で ジェネレータ表現 (generator expressions) が導入された [PEP 289]。ジェネレータ表現は リスト内包表記 (list comprehensions) に似ているが、 ジェネレータはコールのたびに要素を1つ1つ生成する点が異なる。 ジェネレータは長い順列などに適している。
      linkGenerator = (link for link in get_all_links() if not link.followed)
      for link in linkGenerator:
        ...process link...

    ジェネレータ表現は必ず 括弧() で囲まなければならない。
  • 2.2では, 次の文でジェネレータを 有効にする 必要がある。 from __future__ import generators (2.3 以降では不要)

def genID(initialValue=0):
  v = initialValue
  while v < initialValue + 1000:
    yield "ID_%05d" % v
    v += 1
  return    # または: raise StopIteration()

generator = genID() # ジェネレータの生成
for i in range(10): # 10 個の値を生成
  print generator.next()

ディスクリプタ / 属性アクセス

  • ディスクリプタ (Descriptor)ディスクリプタ・プロトコル に対応する次の 3 つのメソッドを実装したオブジェクトである。
    • __get__(self, obj, type=None) --> value
    • __set__(self, obj, value)
    • __delete__(self, obj)
    Python は、新形式クラス (new-style class) の属性やメソッドの記述やアクセスの際に ディスクリプタ を透過的に使う (例、object の派生クラス)。 [ 詳細]
  • 定義可能な組み込みのディスクリプタ
    • スタティックメソッド (Static methods) : staticmethod(f) とすると、メソッド f(x) がスタティック (unbound) になる。
    • クラスメソッド (Class methods): 第1引数にクラスをとる以外はスタティックと同様。 => f = classmethod(f) とすると、メソッド f(theClass, x) がクラスメソッドになる。
    • プロパティ (Properties) : プロパティ は新しい組み込み型 property の インスタンスである。プロパティは属性に対する ディスクリプタ プロトコルを実装している。 => propertyName = property(fget=None, fset=None, fdel=None, doc=None) として、クラスの内部または外部で属性を定義する。定義後は propertyName または obj.propertyName で属性にアクセスする。
    • スロット (Slots) : 新形式クラスでは __slots__ クラス属性を定義すると、割り当て可能な 属性名を制限できる。 これにより、属性名のミスタイプを防止できる (通常、ミスタイプをしても Python が発見してくれることはなく、 新しい属性が生成される)。 例、 __slots__ = ('x', 'y')
      :最近の議論からすると, slot を使用する本当の目的はいまだ明確ではない (最適化?)。 よって slot の使用は奨励されないであろう。

関数・メソッドのデコレータ

  • [PEP 318] デコレータ (decorator) D は、 @D と記述する。記述位置は、デコレート対象となる関数・メソッドの直前の行である。
        @D
        def f(): ...
    上記は次の記述と同じ。
        def f(): ...
        f = D(f)

  • 複数のデコレータを重ねて適用することもできる。
        @A
        @B
        @C
        def f(): ...
    上記は次の記述と同じ。
        f = A(B(C(f)))
  • デコレータは単なる関数である。デコレート対象となる関数