■■■ 代表的なイテレータ ■■■ iter(list) リストをイテレータに変換 zip() 並列データをペアにする map() 関数適用 filter() 条件に合うものを抽出 enumerate() 添え字付きのイテレータ open() ファイルの行ごとの読み出し ■■■ 便利 ■■■ ■ 文字列の中に {変数} を書く -------------------------------------------------- x = 10 print(f"x = {x}") # → "x = 10" 以下のように引数でも使える number = 123; pdate_user_email(number, f'test@test.com{number}') -------------------------------------------------- ■ タプルのアンパック -------------------------------------------------- x, y = 10, 20 # ← 実はタプルのアンパック print(x) # 10 print(y) # 20 -------------------------------------------------- ■ Enum仕様例 -------------------------------------------------- # 通常のEnum class EnumStatus1(Enum): XXXXX1 = 1 XXXXX2 = 2 XXXXX3 = 3 XXXXX4 = 4 for status in EnumStatus1: print(f'### EnumStatus1.{status.name}.name ###:{status.name}') print(f'### EnumStatus1.{status.name}.value ###:{status.value}') # Enum にラベルを埋め込む class EnumStatus2(Enum): XXXXX1 = (1, '保留中') XXXXX2 = (2, '実行中') XXXXX3 = (3, '成功') XXXXX4 = (4, '失敗') def __init__(self, value, label): #Enumの仕様で(1, '保留中')などのタプルが渡される self._value_ = value self.label = label for status in EnumStatus2: print(f'### EnumStatus2.{status.name}.name ###:{status.name}') print(f'### EnumStatus2.{status.name}.value ###:{status.value}') print(f'### EnumStatus2.{status.name}.label ###:{status.label}') # Enum + ラベル辞書 class EnumStatus3(Enum): XXXXX1 = 1 XXXXX2 = 2 XXXXX3 = 3 XXXXX4 = 4 STATUS_LABELS = { EnumStatus3.XXXXX1: '保留中', EnumStatus3.XXXXX2: '実行中', EnumStatus3.XXXXX3: '成功', EnumStatus3.XXXXX4: '失敗', } for status in EnumStatus3: print(f'### EnumStatus3.{status.name}.name ###:{status.name}') print(f'### EnumStatus3.{status.name}.value ###:{status.value}') print(f'### EnumStatus4.{status.name}.label ###:{STATUS_LABELS[status]}') -------------------------------------------------- ■ iter(list) イテラブル(リストなど)からイテレータを作成する。 next() で1つずつ要素を取り出すのに使う。 -------------------------------------------------- lst = [1, 2, 3] it = iter(lst) print(next(it)) # 1 print(next(it)) # 2 -------------------------------------------------- ■ zip() 複数のリストを「対応する要素ごとのタプル」にまとめる。 戻り値はイテレータ(使い切り)。 -------------------------------------------------- a = ['id', 'name'] b = [1, 'Alice'] print(list(zip(a, b))) # [('id', 1), ('name', 'Alice')] -------------------------------------------------- ■ map() 各要素に関数を一括適用する。 戻り値はイテレータ(使い切り)。 -------------------------------------------------- nums = [1, 2, 3] result = map(lambda x: x * 2, nums) print(list(result)) # [2, 4, 6] -------------------------------------------------- ■ enumerate() for ループなどで、インデックスと要素のペアを取得できる。 戻り値はイテレータ(使い切り)。 -------------------------------------------------- lst = ['a', 'b', 'c'] for i, val in enumerate(lst): print(i, val) # 0 a # 1 b # 2 c -------------------------------------------------- ■ open() ファイルを開く。 テキストファイルを読み書きするときに使う。 -------------------------------------------------- with open('file.txt', 'r') as f: for line in f: print(line.strip()) -------------------------------------------------- ■ len() リスト、文字列、辞書などの要素数や長さを取得。 -------------------------------------------------- my_list = [1, 2, 3] print(len(my_list)) # 3 -------------------------------------------------- ■ ilter() 条件に合う要素だけを取り出す。 戻り値はイテレータ。 -------------------------------------------------- nums = [1, 2, 3, 4] result = filter(lambda x: x % 2 == 0, nums) print(list(result)) # [2, 4] -------------------------------------------------- ■ set() 重複を除いた集合を作る。 順序は保証されない。 -------------------------------------------------- nums = [1, 2, 2, 3] print(set(nums)) # {1, 2, 3} -------------------------------------------------- ■ sorted() ソートされた新しいリストを返す(元のリストは変更されない)。 -------------------------------------------------- nums = [3, 1, 2] print(sorted(nums)) # [1, 2, 3] -------------------------------------------------- ■ lambda式 **名前のない関数(無名関数)**を定義する簡略記法。 主に map, filter, sorted などの引数で使う。 -------------------------------------------------- double = lambda x: x * 2 print(double(4)) # 8 # mapとの組み合わせ nums = [1, 2, 3] print(list(map(lambda x: x + 10, nums))) # [11, 12, 13] -------------------------------------------------- ■ カラムlistと値listを辞書配列にまとめる -------------------------------------------------- collist = ['id', 'name', 'age'] # カラムlist vallist = [1, 'Alice', 30] # 値list zipobj = zip(collist, vallist) # zipでzipオブジェクトに変換 ziplist = list(zipobj) # zipオブジェクトをlistに変換 ※zipobjはイテレータなのでこの時点で空になる print(ziplist) # [('id', 1), ('name', 'Alice'), ('age', 30)] # zip型はイテレータ(1つずつ値を取り出すことができるオブジェクト)なので一度 zipobj = zip(collist, vallist) # zipでzipオブジェクトに変換 zipdict = dict(zipobj) # zipオブジェクトをdictに変換 ※zipobjはイテレータなのでこの時点で空になる print(zipdict) # {'id': 1, 'name': 'Alice', 'age': 30} print(list(zipobj)) # {'id': 1, 'name': 'Alice', 'age': 30} -------------------------------------------------- ■ with ブロック __enter__() と __exit__() を実装しているオブジェクトであれば、閉じ忘れなどを防止できる。 -------------------------------------------------- with self.connection.cursor() as cursor: # MySQLカーソルを生成してwithブロックの中でcursorとして利用できる cursor.execute("SELECT * FROM users") # MySQLカーソルでクエリ実行して結果を取得 rows = cursor.fetchall() # クエリの結果セットを Python に取り込む -------------------------------------------------- ■■■ コレクション型の操作 ■■■ ■ list(リスト) (作成) -------------------------------------------------- fruits = ["apple", "banana", "orange"] -------------------------------------------------- (添え字でアクセス ※0から始まる) -------------------------------------------------- print(fruits[1]) # banana -------------------------------------------------- (ループで添え字と値を取り出す) -------------------------------------------------- for index, value in enumerate(fruits): print(f"{index}: {value}") -------------------------------------------------- または -------------------------------------------------- for i, v in enumerate(fruits): print(i, v) # 0 apple / 1 banana / 2 orange -------------------------------------------------- (空判定) -------------------------------------------------- if not fruits: print("空のリストです") -------------------------------------------------- ■ tuple(タプル) (作成) -------------------------------------------------- position = (35.6895, 139.6917) ★(重要)タプルはカンマ区切りで作られる(丸括弧は関係ない) -------------------------------------------------- 例) 1, → タプル (1,) → より明示的なタプル(推奨) (1) → タプルじゃない(ただの整数) (添え字でアクセス ※0から始まる) -------------------------------------------------- print(position[0]) # 35.6895 -------------------------------------------------- (ループで添え字と値を取り出す) -------------------------------------------------- for index, value in enumerate(position): print(f"{index}: {value}") -------------------------------------------------- または -------------------------------------------------- for i, v in enumerate(position): print(i, v) # 0 35.6895 / 1 139.6917 -------------------------------------------------- (空判定) -------------------------------------------------- if not position: print("空のタプルです") -------------------------------------------------- ■ dict(辞書) (作成) -------------------------------------------------- user = {"name": "Alice", "age": 30} -------------------------------------------------- (添え字でアクセス) -------------------------------------------------- print(user["name"]) # Alice -------------------------------------------------- (ループで添え字と値を取り出す) -------------------------------------------------- for key, value in user.items(): print(f"{key}: {value}") -------------------------------------------------- (空判定) -------------------------------------------------- if not user: print("空の辞書です") -------------------------------------------------- ■ set(セット:重複のない集合) (作成) -------------------------------------------------- colors = {"red", "green", "blue"} -------------------------------------------------- (添え字でアクセス ※0から始まる) -------------------------------------------------- セットは順序を保証しないので、インデックスではアクセスできません。 -------------------------------------------------- (ループで添え字と値を取り出す) -------------------------------------------------- for value in colors: print(value) -------------------------------------------------- (空判定) -------------------------------------------------- if not colors: print("空のセットです") -------------------------------------------------- ■■■ RDS操作 ■■■