Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ None型とバイナリデータ | 型間の相互作用
Pythonのデータ型

None型とバイナリデータ

メニューを表示するにはスワイプしてください

実際のプログラムでは、欠損値やバイナリデータを扱う。値が存在しないことを示すには None を使用し、生のバイナリデータには bytesbytearray を使用する。それぞれの適切な用途と、テキストとバイト間の安全な変換方法を理解する。

「値なし」を示す None

None は「ここには何もない」という意味の単一オブジェクト。

1234567
result = None email = None print(result is None) # True print(email is None) # True if result is None: print("No result yet")

is None0 も偽と判定されるため、真偽値チェックの代わりに "" を使用する。

123
value = 0 print(not value) # True print(value is None) # False

デフォルト値とフォールバック

None は、値が意図的に存在しないことを明示的に示すマーカーとして使用されます。これにより、「値が提供されていない」状態と、0"" のような有効な値を区別できるため、デフォルト値やフォールバックの動作がより安全かつ予測可能になります。

1234567
x = 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 を設定してタグが指定されていないことを示す方法を示しています。これにより、関数は安全なデフォルト値を割り当てつつ、必要に応じて呼び出し元が値を上書きできるようになります。

1234567
def 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 はテキストを保持し、bytesbytearray は生のバイト値を保持します。

1234
b1 = b"hello" b2 = bytes([72, 105]) buf = bytearray(b"abc") buf[0] = 65

エンコーディングとデコーディング

エンコーディングはテキストをバイト列に変換し、信頼性の高い保存や転送を可能にする処理。デコーディングはそのバイト列を再び読みやすいテキストに戻す処理。UTF-8のような定義済みエンコーディングを使用することで、文字が正しく保持される。

123
text = "café" data = text.encode("utf-8") back = data.decode("utf-8")

テキストとバイトの混在

テキスト(str)とバイト(bytes)は、異なるデータ型を表すため直接結合できません。安全に混在させるには、明示的なエンコーディングを使用してテキストを先にバイトへ変換する必要があります。

123456
try: b"ID:" + "123" except TypeError as e: print(e) ok = b"ID:" + "123".encode("utf-8")

長さの違い

一部の文字は、テキスト要素としては1文字でも、バイトでは複数バイトになる場合があります。そのため、strでの長さとエンコード後の長さが異なることがあります。これは、UTF-8のようなエンコーディングが1文字を複数バイトで表現する場合があるためです。

123
ch = "é" len(ch) # 1 len(ch.encode()) # 2

ファイル

バイナリファイルは "rb" モードで開く必要があり、生のバイト列が保存された通りに正確に読み取られます。これにより、Python がデータをテキストとして解釈しようとするのを防ぎます。

# with open("example.png", "rb") as f:
#     blob = f.read()
question mark

どのチェックが欠損値を正しく検出しますか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 4.  3

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 4.  3
some-alt