Just Python
10.1K subscribers
4.46K photos
11 videos
4.44K links
🐍Простое изучение Python.

Ссылка: @Portal_v_IT

Сотрудничество: @oleginc, @tatiana_inc

Канал на бирже: telega.in/c/justpython_it

РКН: clck.ru/3MnbSc
Download Telegram
Те же операнды, другая история в Python! (ч.1)

a += b не всегда ведет себя так же, как a = a + b. Классы могут по-разному реализовывать op= операторы, и списки делают это.

Выражение a = a + [5,6,7,8] генерирует новый список и устанавливает a ссылку на этот новый список, оставляя b без изменений.

#theory // Just Python & Max
Те же операнды, другая история в Python! (ч.2)

Выражение a += [5,6,7,8] на самом деле сопоставлено с функцией "extend", которая работает со списком таким образом, что a и b по-прежнему указывают на тот же список, который был изменен на месте.

#theory // Just Python & Max
Разрешение имен, игнорирующее область видимости класса в Python(ч.1)

Области, вложенные внутри определения класса, игнорируют имена, связанные на уровне класса.

#theory // Just Python & Max
Разрешение имен, игнорирующее область видимости класса в Python(ч.2)

Выражение генератора имеет свою собственную область видимости.

Начиная с Python 3.X, понимание списков также имеет свою собственную область.

#theory // Just Python & Max
Округляет, как банкир в Python(ч.1)

Давайте реализуем наивную функцию для получения среднего элемента списка

Это не ошибка точности с плавающей запятой, на самом деле, такое поведение является преднамеренным. Начиная с Python 3.0, round() использует округление банкира, где дроби .5 округляются до ближайшего четного числа:

#theory // Just Python & Max
Синтаксис в Python

Синтаксис представления списков обеспечивает простой и надежный способ для создания новых списков из уже существующих. Допустим, нам нужен новый список, в котором каждый элемент старого списка будет умножен на 3. При помощи цикла for мы можем это сделать.

#theory // Just Python & Max
Enum перечисления в Python

Этот класс можно назвать удобным способом инкапсуляции списка констант, чтобы они не были разбросаны по всему коду без структуры.

#theory // Just Python & Max
Округляет, как банкир в Python(ч.2)

Это рекомендуемый способ округления дробей .5, как описано в IEEE 754. Однако в школе большую часть времени преподают другой способ (округление от нуля), поэтому округление банкира, вероятно, не так хорошо известно. Кроме того, некоторые из самых популярных языков программирования (например: JavaScript, Java, C / C ++, Ruby, Rust) также не используют банковское округление.

Следовательно, это все еще довольно специфично для Python и может привести к путанице при округлении дробей.

Смотрите Документы round() или этот поток stackoverflow для получения дополнительной информации.

Обратите внимание, что get_middle([1]) было возвращено только 1, потому что индекс был round(0.5) - 1 = 0 - 1 = -1, возвращая последний элемент в списке.

#theory // Just Python & Max
Иголки в стоге сена в Python(ч.1)

Для 1 правильным утверждением для ожидаемого поведения является x, y = (0, 1) if True else (None, None).

#theory // Just Python & Max
Иголки в стоге сена в Python(ч.2)

Для 2 правильным выражением для ожидаемого поведения является t = ('one',) or t = 'one', (пропущенная запятая), в противном случае интерпретатор считает, что t это str и повторяет его посимвольно.

() является специальным маркером и обозначает пустой tuple.

#theory // Just Python & Max
Иголки в стоге сена в Python(ч.3)

В 3, как вы, возможно, уже поняли, после 5-го элемента ("that") в списке отсутствует запятая. Итак, с помощью неявной конкатенации строковых литералов,

>>> ten_words_list
['some', 'very', 'big', 'list', 'thatconsists', 'of', 'exactly', 'ten', 'words']


#theory // Just Python & Max
Иголки в стоге сена в Python(ч.4)

В 4-м фрагменте на AssertionError был поднят вопрос, потому что вместо утверждения отдельного выражения a == b мы утверждаем весь кортеж. Следующий фрагмент прояснит ситуацию,

>>> a = "python"
>>> b = "javascript"
>>> assert a == b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError

>>> assert (a == b, "Значения не равны")
<stdin>:1: SyntaxWarning: assertion is always true, perhaps remove parentheses?

>>> assert a == b, "Значения не равны"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError: Values are not equal


#theory // Just Python & Max
Иголки в стоге сена в Python(ч.5)

Что касается пятого фрагмента, большинство методов, которые изменяют элементы объектов последовательности / сопоставления, такие как list.append, dict.update, list.sort и т.д. измените объекты на месте и верните None. Обоснование этого заключается в повышении производительности за счет отказа от создания копии объекта, если операция может быть выполнена на месте.

#theory // Just Python & Max
Иголки в стоге сена в Python(ч.6)

Последний должен быть довольно очевидным, изменяемым объектом (например list) может быть изменен в функции, и переназначение неизменяемого (a -= 1) не является изменением значения.

#theory // Just Python & Max
Совет на ближайшие годы — изучайте ВАЙБ-КОДИНГ

ИИ уже пишет код, чинит баги, генерирует тесты, документацию и помогает запускать продукты быстрее, чем это делали классические команды разработки. И это уже не "будущее когда-нибудь", а реальность, которая меняет рынок уже сегодня

И те, кто научится вайбкодить сейчас, будут увереннее конкурировать на рынке и зарабатывать больше тех, кто по-прежнему делает всё вручную.

Стартовать с нуля поможет канал Вайб-кодинг. Там ребята круглосуточно мониторят более 320 российских и зарубежных источников и публикуют только главное: релизы, инструменты, гайды, курсы и практические кейсы.

Подписывайтесь, нас уже 30 тысяч: @vibecoding_tg
Разбиения в Python

На первый взгляд может показаться, что разделителем по умолчанию для split является один пробел ' ', но согласно документации:

Если sep не указан или есть None, применяется другой алгоритм разделения: последовательные пробельные строки рассматриваются как единый разделитель, и результат не будет содержать пустых строк в начале или в конце, если строка содержит начальный или конечный пробел. Следовательно, возвращается разделение пустой строки или строки, состоящей только из пробелов с разделителем None []. Если задан sep, последовательные разделители не группируются вместе и считаются разделителями пустых строк (например, '1,,2'.split(',') возвращает ['1', '', '2']). Возвращает разделение пустой строки указанным разделителем [''].

#theory // Just Python & Max
Дикий импорт в Python (ч.1)

Часто рекомендуется не использовать импорт подстановочных знаков. Первая очевидная причина этого заключается в том, что при импорте подстановочных знаков имена с начальным подчеркиванием не импортируются. Это может привести к ошибкам во время выполнения.

#theory // Just Python & Max
Дикий импорт в Python (ч.2)

Если бы мы использовали from ... import a, b, c синтаксис, прошлого NameError не произошло бы.

#theory // Just Python & Max
Дикий импорт в Python (ч.3)

Если вы действительно хотите использовать импорт по шаблону, то вам нужно будет определить список all в вашем модуле, который будет содержать список общедоступных объектов, которые будут доступны, когда мы выполним импорт по шаблону.

#theory // Just Python & Max
Полуночного времени не существует в Python?

До Python 3.5 логическое значение для datetime.time объекта считалось равным False, если оно представляло полночь по UTC. Он подвержен ошибкам при использовании if obj: синтаксиса для проверки, является ли obj нулевым или каким-либо эквивалентом "пустого".

#theory // Just Python & Max