Python 言語チートシート
Python は、クロスプラットフォームのコンピュータ プログラミング言語です。オブジェクト指向の動的型付け言語であり、もともとは自動化スクリプト (shell) を記述するために設計されました。バージョンの継続的な更新と言語機能の追加に伴い、独立した大規模なプロジェクトの開発にますます使用されるようになっています。
全般
- Python は大文字と小文字を区別します
- Python のインデックスは 0 から始まります
- Python は中括弧を使用する代わりに、空白 (タブまたはスペース) を使用してコードをインデントします。
ヘルプ
| ヘルプ ホームページ | help() |
| 関数のヘルプ | help(str.replace) |
| モジュールのヘルプ | help(re) |
モジュール (ライブラリ)
| モジュール内容を一覧表示 | dir(module1) |
| モジュールのロード | import module1 * |
| モジュールから関数を呼び出す | module1.func1() |
import 文は新しい名前空間を作成し、その名前空間内で関連する .py ファイル内のすべての文を実行します。 モジュールの内容を現在の名前空間にロードする場合は、“from module1 import *” を使用します。
スカラー型
データ型の確認: type(variable)
整数 (Integers)
int/long - 大きな整数は自動的に長整数に変換されます (Python 3 では int のみが存在し、サイズ制限はありません)。
浮動小数点数 (Floats)
float - 64 ビット。「double」型はありません。
ブール値 (Booleans)
bool - 真 (True) または 偽 (False)。
文字列 (Strings)
str - Python 2.x のデフォルトは ASCII です。Python 3 は Unicode です。
- 文字列は単一引用符、二重引用符、または三重引用符で囲むことができます。
- 文字列は文字のシーケンスであるため、他のシーケンスと同様に扱うことができます。
- 特殊文字は、前に \ を付けるか、r で始まる生の文字列 (raw string) を使用して表現できます。
str1 = r'this\f?ff' - 文字列の書式設定は、いくつかの方法で実現できます。
template = '%.2f %s haha $%d' str1 = template % (4.88, 'hola', 2)
str()、bool()、int()、float() は、明示的な型変換関数でもあります。
Null 値 (空値)
NoneType(None) - Python の「null」値 (None オブジェクトのインスタンスは 1 つだけ存在します)。
- None は予約キーワードではなく、“NoneType” の唯一のインスタンスです。
- None は、オプションの関数引数の一般的なデフォルト値です。
def func1(a, b, c = None) - None の一般的な使用方法:
if variable is None :
日付と時刻
datetime - Python 組み込みの “datetime” モジュールには、“datetime”、“date”、“time” などの型が用意されています。
- “datetime” は、“date” と “time” に格納されている情報を組み合わせたものです。
文字列から日時を作成 dt1 = datetime.strptime(‘20091031’, ‘%Y%m%d’) 「日付」オブジェクトを取得 dt1.date() 「時刻」オブジェクトを取得 dt1.time() 日時を文字列にフォーマット dt1.strftime(’%m/%d/%Y %H:%M’) フィールド値を変更 dt2 = dt1.replace(minute = 0, second=30) 差分を取得 diff = dt1 - dt2 # diff は ‘datetime.timedelta’ オブジェクトです
データ構造
タプル (Tuples)
タプルは、固定長で変更不可能なシーケンスです。
| タプルの作成 | tup1=4,5,6 or tup1 = (6,7,8) |
| 入れ子になったタプルの作成 | tup1 = (4,5,6), (7,8) |
| シーケンスや反復子をタプルに変換 | tuple([1, 0, 2]) |
| タプルの結合 | tup1 + tup2 |
| タプルのアンパック | a, b, c = tup1 |
| 変数の入れ替え | b, a = a, b |
リスト (Lists)
リストは、可変長で要素を変更可能なシーケンスです。
| リストの作成 | list1 = [1, ‘a’, 3] or list1 = list(tup1) |
| リストの結合 | list1 + list2 or list1.extend(list2) |
| リストへの追加 | list1.append(‘b’) |
| 指定位置に挿入 | list1.insert(posIdx, ‘b’) |
| インデックスを指定して削除 | valueAtIdx = list1.pop(posIdx) |
| 最初に見つかった値を削除 | list1.remove(‘a’) |
| 値が存在するか判断 | 3 in list1 => True |
| リストのソート | list1.sort() |
| カスタム関数を使用してソート | list1.sort(key = len) # 長さ順でソート |
注意:
- 「開始」インデックスは含まれますが、「終了」インデックスは含まれません。
- start/stop は省略可能で、デフォルトは開始/終了です。
スライス (Slicing)
シーケンス型には、‘str’、‘array’、’tuple’、’list’ などが含まれます。
list1[start:stop]
list1[start:stop:step]
list1[::2]
str1[::-1]辞書 (ハッシュ)
| 辞書の作成 | dict1 ={‘key1’ :‘value1’, 2 :[3, 2]} |
| zip 関数による辞書の構築 | dict(zip(keyList, valueList)) |
| 要素の取得 | dict1[‘key1’] |
| 要素の変更/追加 | dict1[‘key1’] = ’newValue’ |
| 値の取得 (存在しない場合はデフォルト値を返す) | dict1.get(‘key1’, defaultValue) |
| キーが存在するか判断 | ‘key1’ in dict1 |
| 要素の削除 | del dict1[‘key1’] |
| キー一覧の取得 | dict1.keys() |
| 値一覧の取得 | dict1.values() |
| 値の更新 | dict1.update(dict2) # dict1 の値が dict2 で置き換えられる |
集合 (Sets)
集合は、一意の要素を持つ順序付けられていないコレクションです。
| 集合の作成 | set([3, 6, 3]) or {3, 6, 3} |
| 部分集合か判断 | set1.issubset(set2) |
| 上位集合か判断 | set1.issuperset(set2) |
| 集合が同じか判断 | set1 == set2 |
| 和集合 (or) | set1 |
| 積集合 (and) | set1 & set2 |
| 差集合 | set1 - set2 |
| 対称差集合 (xor) | set1 ^ set2 |
関数
-
基本形式
def func1(posArg1, keywordArg1 = 1, ..): -
「関数はオブジェクトである」一般的な使用方法:
def func1(ops = [str.strip, user_define_func, ..], ..): for function in ops: value = function(value) -
戻り値
- 関数の末尾に return 文がない場合、何も返されません (None)。
- タプル オブジェクトを介して複数の値を返す
return (value1, value2) value1, value2 = func1(..) -
無名関数 (ラムダ)
lambda x : x * 2 # def func1(x) : return x * 2 と同等
よく使われる関数
-
Enumerate: シーケンス (キー, 値) のタプルを返します。キーは現在のアイテムのインデックスです。
for key, val in enumerate(collection): -
Sorted: すべての反復可能なオブジェクトをソートします。
sorted([2, 1, 3]) => [1, 2, 3] -
Zip: オブジェクト内の対応する要素をタプルにまとめ、それらのタプルからなるリストを返します。
zip(seq1, seq2) => [('seq1_1', 'seq2_1'), (..), ..] -
Reversed: 反転した反復子を返します。
list(reversed(range(10)))
制御フロー
-
「if else」条件の演算子:
2つの変数が同じオブジェクトか確認 var1 is var2 2つの変数が異なるオブジェクトか確認 var1 is not var2 2つの変数が同じ値か確認 var1 == var2 -
for 演算子の一般的な使用方法:
for element in iterator : -
‘pass’: 何もしない。通常はプレースホルダーとして使用されます。
-
三項演算子
value = true-expr if condition else false-expr -
switch/case 文はなく、if/elif を使用します。
オブジェクト指向 (OOP)
-
‘object’ は、すべての Python 型の基本です
-
すべて (数値、文字列、関数、クラス、モジュールなど) はオブジェクトであり、各オブジェクトには ’type’ があります。オブジェクト変数は、メモリ内のその場所を指すポインタです。
-
オブジェクトの基本形式
class MyObject(object): # 'self' は Java/C++ における 'this' に相当します def __init__(self, name): self.name = name def memberFunc1(self, arg1): .. @staticmethod def classFunc2(arg1): .. obj1 = MyObject('name1') obj1.memberFunc1('a') MyObject.classFunc2('b') -
対話型ツール:
dir(variable1) # オブジェクトで利用可能なすべてのメソッドを表示
文字列操作
区切り文字を使用してリスト/タプルを結合する
', '.join([ 'v1', 'v2', 'v3']) => 'v1, v2, v3'文字列のフォーマット
string1 = 'My name is {0} {name}'
newString1 = string1.format('Sean', name = 'Chen')文字列の分割
sep = '-'
stringList1 = string1.split(sep)文字列の切り出し (slice)
start = 1
string1[start:8]文字列の 0 埋め (パディング)
month = '5'
month.zfill(2) => '05'
month = '12'
month.zfill(2) => '12'例外処理
- 基本形式
try:
..
except ValueError as e:
print(e)
except (TypeError, AnotherError):
..
except:
..
finally:
..- 手動で例外を投げる
raise AssertionError # アサーション失敗
raise SystemExit # プログラム終了のリクエスト
raise RuntimeError('Error message :..')リスト、集合、辞書の内包表記
コードを読みやすく書きやすくするためのシンタックス シュガー (糖衣構文)。
-
リスト内包表記:
コレクションの要素をフィルタリングし、フィルタを通過した要素を簡潔な式で変換することで、新しいリストを簡潔に作成します。
基本形式
[expr for val in collection if condition]ショートカット:
result = [] for val in collection: if condition: result.append(expr) -
辞書内包表記:
{key-expr : value-expr for value in collection if condition} -
集合内包表記: リスト内包表記と同じですが、[] の代わりに {} を使用します。
-
入れ子になったリスト内包表記:
基本形式:
[expr for val in collection for innerVal in val if condition]