None та бінарні Дані
У реальних програмах часто виникає необхідність працювати з відсутніми значеннями та сирими бінарними даними. Використовуйте None для позначення відсутності значення, а bytes або bytearray — для обробки бінарного вмісту з файлів або мережі. Дізнайтеся, коли слід використовувати кожен тип і як безпечно конвертувати текст у байти та навпаки.
None для "відсутнього значення"
None — це єдиний спеціальний об'єкт, що означає "тут нічого немає".
12345678910111213# Basic checks result = None email = None print("result is None:", result is None) # True print("email is None:", email is None) # True # Identity checks are the reliable way if result is None: print("No result yet") if email is not None: print("Email present") else: print("Email missing")
None є хибним значенням, але такими ж є 0 та "". Віддавайте перевагу перевірці через is None, коли дійсно маєте на увазі "відсутнє значення".
123value = 0 print("not value:", not value) # True - but 0 is a valid value print("value is None:", value is None) # False - correctly distinguishes 0 from missing
Значення за замовчуванням і запасні варіанти
1234567891011x = None safe_or = x or "unknown" # replaces any falsey value safe_none_only = "unknown" if x is None else x print("x=None, x or 'unknown':", safe_or) # 'unknown' print("x=None, None-only fallback:", safe_none_only) # 'unknown' x = 0 safe_or = x or "unknown" safe_none_only = "unknown" if x is None else x print("x=0, x or 'unknown':", safe_or) # 'unknown' - maybe not desired print("x=0, None-only fallback:", safe_none_only) # 0 - preserves valid zero
Функції та параметри
12345678910111213def find_user(name): # returns None if not found return None def add_tag(text, tag=None): if tag is None: tag = "general" return f"[{tag}] {text}" user = find_user("Ada") print("user is None:", user is None) # True print(add_tag("hello")) # "[general] hello" print(add_tag("hello", tag="news")) # "[news] hello"
bytes та bytearray для бінарних даних
Текст використовує str і містить символи Unicode. Бінарні дані використовують bytes або bytearray і містять сирі байтові значення від 0 до 255.
123456789# Creating binary data b1 = b"hello" # bytes literal b2 = bytes([72, 105]) # b"Hi" buf = bytearray(b"abc") # mutable buf[0] = 65 # now b"Abc" print("b1:", b1, type(b1)) # b'hello' <class 'bytes'> print("b2:", b2, type(b2)) # b'Hi' <class 'bytes'> print("buf:", buf, type(buf)) # bytearray(b'Abc') <class 'bytearray'>
Перетворення тексту та байтів: кодування та декодування
1234567text = "café" data = text.encode("utf-8") # to bytes back = data.decode("utf-8") # back to str print("text:", text, type(text)) # café <class 'str'> print("data:", data, type(data)) # b'caf\xc3\xa9' <class 'bytes'> print("back:", back, type(back)) # café <class 'str'>
Змішування тексту та байтів — недійсно без конвертації
123456789# Non-valid operation with explicit error print try: bad = b"ID:" + "123" # bytes + str - not allowed except TypeError as e: print("TypeError when mixing bytes and str:", e) # Correct combination ok = b"ID:" + "123".encode("utf-8") print("combined bytes:", ok) # b'ID:123'
Довжини можуть відрізнятися
123ch = "é" print("len('é') as str:", len(ch)) # 1 character print("len('é' encoded):", len(ch.encode("utf-8")))# 2 bytes
Файли
# Binary files yield bytes
# with open("example.png", "rb") as f:
# blob = f.read()
1. Яка перевірка коректно визначає відсутнє значення?
2. Який рядок правильно поєднує текст із префіксом bytes?
3. Яке твердження є правильним?
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 3.45
None та бінарні Дані
Свайпніть щоб показати меню
У реальних програмах часто виникає необхідність працювати з відсутніми значеннями та сирими бінарними даними. Використовуйте None для позначення відсутності значення, а bytes або bytearray — для обробки бінарного вмісту з файлів або мережі. Дізнайтеся, коли слід використовувати кожен тип і як безпечно конвертувати текст у байти та навпаки.
None для "відсутнього значення"
None — це єдиний спеціальний об'єкт, що означає "тут нічого немає".
12345678910111213# Basic checks result = None email = None print("result is None:", result is None) # True print("email is None:", email is None) # True # Identity checks are the reliable way if result is None: print("No result yet") if email is not None: print("Email present") else: print("Email missing")
None є хибним значенням, але такими ж є 0 та "". Віддавайте перевагу перевірці через is None, коли дійсно маєте на увазі "відсутнє значення".
123value = 0 print("not value:", not value) # True - but 0 is a valid value print("value is None:", value is None) # False - correctly distinguishes 0 from missing
Значення за замовчуванням і запасні варіанти
1234567891011x = None safe_or = x or "unknown" # replaces any falsey value safe_none_only = "unknown" if x is None else x print("x=None, x or 'unknown':", safe_or) # 'unknown' print("x=None, None-only fallback:", safe_none_only) # 'unknown' x = 0 safe_or = x or "unknown" safe_none_only = "unknown" if x is None else x print("x=0, x or 'unknown':", safe_or) # 'unknown' - maybe not desired print("x=0, None-only fallback:", safe_none_only) # 0 - preserves valid zero
Функції та параметри
12345678910111213def find_user(name): # returns None if not found return None def add_tag(text, tag=None): if tag is None: tag = "general" return f"[{tag}] {text}" user = find_user("Ada") print("user is None:", user is None) # True print(add_tag("hello")) # "[general] hello" print(add_tag("hello", tag="news")) # "[news] hello"
bytes та bytearray для бінарних даних
Текст використовує str і містить символи Unicode. Бінарні дані використовують bytes або bytearray і містять сирі байтові значення від 0 до 255.
123456789# Creating binary data b1 = b"hello" # bytes literal b2 = bytes([72, 105]) # b"Hi" buf = bytearray(b"abc") # mutable buf[0] = 65 # now b"Abc" print("b1:", b1, type(b1)) # b'hello' <class 'bytes'> print("b2:", b2, type(b2)) # b'Hi' <class 'bytes'> print("buf:", buf, type(buf)) # bytearray(b'Abc') <class 'bytearray'>
Перетворення тексту та байтів: кодування та декодування
1234567text = "café" data = text.encode("utf-8") # to bytes back = data.decode("utf-8") # back to str print("text:", text, type(text)) # café <class 'str'> print("data:", data, type(data)) # b'caf\xc3\xa9' <class 'bytes'> print("back:", back, type(back)) # café <class 'str'>
Змішування тексту та байтів — недійсно без конвертації
123456789# Non-valid operation with explicit error print try: bad = b"ID:" + "123" # bytes + str - not allowed except TypeError as e: print("TypeError when mixing bytes and str:", e) # Correct combination ok = b"ID:" + "123".encode("utf-8") print("combined bytes:", ok) # b'ID:123'
Довжини можуть відрізнятися
123ch = "é" print("len('é') as str:", len(ch)) # 1 character print("len('é' encoded):", len(ch.encode("utf-8")))# 2 bytes
Файли
# Binary files yield bytes
# with open("example.png", "rb") as f:
# blob = f.read()
1. Яка перевірка коректно визначає відсутнє значення?
2. Який рядок правильно поєднує текст із префіксом bytes?
3. Яке твердження є правильним?
Дякуємо за ваш відгук!