📘

学習記録_Python実践レシピ(第3章、第9章)

に公開

1. dir() 関数

  • 概要: オブジェクトが持つ属性やメソッドの一覧を返す。

  • 用途: 「このオブジェクトに何ができるか」を調べたいときに使用する。

  • :

    file_obj = open('python.txt')
    file_dir = dir(file_obj)
    print('__enter__' in file_dir)  # True
    
    • __enter__ があるので with open(...) で利用可能。

2. time.sleep()

  • 概要: プログラムを指定した秒数だけ一時停止する。

  • :

    import time
    time.sleep(3)  # 3秒間プログラムが止まる
    

3. os.remove()

  • 概要: 指定したファイルを削除する。

  • 注意: 存在しないファイルを指定すると FileNotFoundError が出る。

  • :

    import os
    os.remove("test.txt")
    

4. redirect_stdout

  • 概要: print() の出力先を一時的にファイルなどへ変更する。

  • 仕組み: print() は標準出力に書き込むが、redirect_stdout を使うと出力先が差し替わる。

  • :

    from contextlib import redirect_stdout
    
    with open("output.txt", "w") as f:
        with redirect_stdout(f):
            print("これはファイルに書き込まれる")
    
  • ポイント: with ブロック内では print() は画面に表示されず、ファイルに書かれる。


5. map(), filter(), round()

  • map(func, iterable)
    → 各要素に関数を適用するイテレータを返す。

    nums = [1, 2, 3]
    result = map(lambda x: x*2, nums)
    print(list(result))  # [2, 4, 6]
    
  • filter(func, iterable)
    → 条件を満たす要素だけを返すイテレータ。

    nums = [1, 2, 3, 4]
    result = filter(lambda x: x % 2 == 0, nums)
    print(list(result))  # [2, 4]
    
  • round(number, ndigits)
    → 四捨五入。ndigits で小数点以下の桁数を指定。

    print(round(3.14159, 2))  # 3.14
    

6. do_something_func()

  • 実在する標準関数ではない。
  • サンプルコードで「何らかの処理をする関数」のダミー名としてよく使われる。

7. サードパーティライブラリ

  • 定義: Python標準ライブラリに含まれないが、外部からインストールして使うライブラリ。
  • インストール方法: 通常 pip install ライブラリ名 を使用。
  • : requests, numpy, pandas

8. 標準ライブラリの2種類

  • ① Python本体に組み込み → すぐに使える(例: math, sys
  • ② インストール時に付属のモジュール → Python本体ではなく同梱(例: email, http

9. retrying ライブラリ

  • 概要: 処理が失敗したときに自動でリトライしてくれるライブラリ。

  • 失敗とは? → 基本的に「例外が発生した」ことを意味する。

  • :

    from retrying import retry
    
    @retry(stop_max_attempt_number=3)
    def risky_task():
        print("実行中…")
        raise ValueError("失敗")
    
    risky_task()
    

    → 最大3回リトライして失敗すれば例外が投げられる。


10. secrets モジュール

  • 概要: 暗号学的に安全な乱数を扱うための標準ライブラリ。

  • よく使う関数:

    • secrets.randbelow(n) → 0 以上 n 未満の乱数
    • secrets.choice(seq) → シーケンスからランダムに1つ選ぶ
    • secrets.token_hex(n) → 安全なランダム文字列を生成
  • 違い: random よりもセキュリティ用途に適している。


11. random.randint() vs 複数取得

  • random.randint(a, b) → a〜b の整数を1つ返す。

  • 複数個欲しい場合は リスト内包表記 を使う。

    import random
    nums = [random.randint(1, 10) for _ in range(5)]
    print(nums)  # 例: [7, 2, 10, 1, 5]
    

12. sorted() と引数の違い

  • ① 集合(set)

    print(sorted({8, 3, 4, 3}))  # [3, 4, 8]
    

    → set は重複を持たないので {8, 3, 4}[3, 4, 8]

  • ② リスト(list)

    print(sorted([8, 3, 4, 3]))  # [3, 3, 4, 8]
    

    → リストは重複を保持するので [3, 3, 4, 8]


13. 文字列を sorted() した場合

  • 文字列はイテラブルなので、1文字ずつ取り出して Unicode順 に並べる。

  • 例:

    print(sorted("Python"))  # ['P', 'h', 'n', 'o', 't', 'y']
    
  • 大文字は小文字より先に並ぶ(ASCII/Unicodeのコード順)。

  • 日本語も「五十音順」ではなく「Unicode順」になる。


14. reversed() の注意点

  • reversed()イテレータ を返す。

  • イテレータは一度消費すると再利用できない。

  • 例:

    nums = [1, 2, 3]
    rev = reversed(nums)
    print(list(rev))  # [3, 2, 1]
    print(list(rev))  # [] (空になる)
    
  • 対策:

    • 毎回 reversed(nums) を呼ぶ
    • もしくは list(reversed(nums)) を変数に保存して使う

✅ まとめ

  • dir() → 属性一覧
  • time.sleep() → 一時停止
  • os.remove() → ファイル削除
  • redirect_stdout → 出力先を切替
  • map/filter/round → データ処理の基本関数
  • retrying → 失敗時に自動リトライ(例外が基準)
  • secrets vs random → セキュリティ用乱数と通常乱数の違い
  • sorted() → setとlistで結果が違う、文字列はUnicode順
  • reversed() → イテレータなので一度しか使えない

Discussion