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つを試してチャットを始めてください