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. Який рядок правильно поєднує текст із префіксом байтів?
3. Яке твердження є правильним?
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Can you explain when to use `None` versus other falsey values?
How do I safely provide default values for function parameters?
What are the main differences between `bytes` and `bytearray`?
Awesome!
Completion rate improved to 5
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. Який рядок правильно поєднує текст із префіксом байтів?
3. Яке твердження є правильним?
Дякуємо за ваш відгук!