None型とバイナリデータ
メニューを表示するにはスワイプしてください
実際のプログラムでは、欠損値やバイナリデータを扱う。値が存在しないことを示すには None を使用し、生のバイナリデータには bytes や bytearray を使用する。それぞれの適切な用途と、テキストとバイト間の安全な変換方法を理解する。
「値なし」を示す None
None は「ここには何もない」という意味の単一オブジェクト。
1234567result = None email = None print(result is None) # True print(email is None) # True if result is None: print("No result yet")
is None や 0 も偽と判定されるため、真偽値チェックの代わりに "" を使用する。
123value = 0 print(not value) # True print(value is None) # False
デフォルト値とフォールバック
None は、値が意図的に存在しないことを明示的に示すマーカーとして使用されます。これにより、「値が提供されていない」状態と、0 や "" のような有効な値を区別できるため、デフォルト値やフォールバックの動作がより安全かつ予測可能になります。
1234567x = None print(x or "unknown") # 'unknown' print("unknown" if x is None else x) x = 0 print(x or "unknown") # 'unknown' print("unknown" if x is None else x) # 0
関数とパラメータ
この例は、関数がパラメータに None を設定してタグが指定されていないことを示す方法を示しています。これにより、関数は安全なデフォルト値を割り当てつつ、必要に応じて呼び出し元が値を上書きできるようになります。
1234567def add_tag(text, tag=None): if tag is None: tag = "general" return f"[{tag}] {text}" print(add_tag("hello")) # [general] hello print(add_tag("hello", "news")) # [news] hello
バイナリデータ
str はテキストを保持し、bytes と bytearray は生のバイト値を保持します。
1234b1 = b"hello" b2 = bytes([72, 105]) buf = bytearray(b"abc") buf[0] = 65
エンコーディングとデコーディング
エンコーディングはテキストをバイト列に変換し、信頼性の高い保存や転送を可能にする処理。デコーディングはそのバイト列を再び読みやすいテキストに戻す処理。UTF-8のような定義済みエンコーディングを使用することで、文字が正しく保持される。
123text = "café" data = text.encode("utf-8") back = data.decode("utf-8")
テキストとバイトの混在
テキスト(str)とバイト(bytes)は、異なるデータ型を表すため直接結合できません。安全に混在させるには、明示的なエンコーディングを使用してテキストを先にバイトへ変換する必要があります。
123456try: b"ID:" + "123" except TypeError as e: print(e) ok = b"ID:" + "123".encode("utf-8")
長さの違い
一部の文字は、テキスト要素としては1文字でも、バイトでは複数バイトになる場合があります。そのため、strでの長さとエンコード後の長さが異なることがあります。これは、UTF-8のようなエンコーディングが1文字を複数バイトで表現する場合があるためです。
123ch = "é" len(ch) # 1 len(ch.encode()) # 2
ファイル
バイナリファイルは "rb" モードで開く必要があり、生のバイト列が保存された通りに正確に読み取られます。これにより、Python がデータをテキストとして解釈しようとするのを防ぎます。
# with open("example.png", "rb") as f:
# blob = f.read()
フィードバックありがとうございます!
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください