Второстепенные (ч.1)
Учитывая, что a это число, ++a и --a оба являются допустимыми операторами Python, но ведут себя по-другому по сравнению с аналогичными операторами в таких языках, как C, C ++ или Java.
В грамматике Python нет ++ оператора. На самом деле это два + оператора.
++a разбирается как, +(+a) что переводится как a. Аналогично, вывод инструкции --a может быть оправдан.
В этом потоке StackOverflow обсуждается обоснование отсутствия операторов увеличения и уменьшения в Python.
#theory // Just Python
Учитывая, что a это число, ++a и --a оба являются допустимыми операторами Python, но ведут себя по-другому по сравнению с аналогичными операторами в таких языках, как C, C ++ или Java.
В грамматике Python нет ++ оператора. На самом деле это два + оператора.
++a разбирается как, +(+a) что переводится как a. Аналогично, вывод инструкции --a может быть оправдан.
В этом потоке StackOverflow обсуждается обоснование отсутствия операторов увеличения и уменьшения в Python.
#theory // Just Python
Второстепенные (ч.2)
Вы, должно быть, знаете о операторе Walrus в Python. Но слышали ли вы когда-нибудь о операторе space-invader?
Он используется в качестве альтернативного оператора увеличения вместе с другим
Эта шутка взята из твита Рэймонда Хеттингера. Оператор space invader на самом деле просто неправильно отформатирован a -= (-1). Что эквивалентно a = a - (- 1). Аналогично для a += (+ 1) случая.
#theory // Just Python
Вы, должно быть, знаете о операторе Walrus в Python. Но слышали ли вы когда-нибудь о операторе space-invader?
Он используется в качестве альтернативного оператора увеличения вместе с другим
Эта шутка взята из твита Рэймонда Хеттингера. Оператор space invader на самом деле просто неправильно отформатирован a -= (-1). Что эквивалентно a = a - (- 1). Аналогично для a += (+ 1) случая.
#theory // Just Python
Оператор обратной импликации.
В Python есть недокументированный оператор обратной импликации.
Если вы замените False и True на 0 и 1 и выполните математические вычисления, таблица истинности эквивалентна оператору обратной импликации.
#theory // Just Python
В Python есть недокументированный оператор обратной импликации.
Если вы замените False и True на 0 и 1 и выполните математические вычисления, таблица истинности эквивалентна оператору обратной импликации.
#theory // Just Python
Оператор @
Поскольку мы говорим об операторах, есть также @ оператор для умножения матриц (не волнуйтесь, на этот раз все по-настоящему).
Оператор @ был добавлен в Python 3.5 с учетом интересов научного сообщества. Любой объект может перегрузить matmul магический метод, чтобы определить поведение для этого оператора.
#theory // Just Python
Поскольку мы говорим об операторах, есть также @ оператор для умножения матриц (не волнуйтесь, на этот раз все по-настоящему).
Оператор @ был добавлен в Python 3.5 с учетом интересов научного сообщества. Любой объект может перегрузить matmul магический метод, чтобы определить поведение для этого оператора.
#theory // Just Python
Сколько может хранить переменных функция?
Python использует 2 байта для хранения локальных переменных в функциях. Теоретически это означает, что в функции может быть определено только 65536 переменных. Однако в python встроено удобное решение, которое можно использовать для хранения более 2 ^ 16 имен переменных. Следующий код демонстрирует, что происходит в стеке, когда определено более 65536 локальных переменных (Внимание: этот код печатает около 2 ^ 18 строк текста, так что будьте готовы!)
#theory // Just Python
Python использует 2 байта для хранения локальных переменных в функциях. Теоретически это означает, что в функции может быть определено только 65536 переменных. Однако в python встроено удобное решение, которое можно использовать для хранения более 2 ^ 16 имен переменных. Следующий код демонстрирует, что происходит в стеке, когда определено более 65536 локальных переменных (Внимание: этот код печатает около 2 ^ 18 строк текста, так что будьте готовы!)
#theory // Just Python
f-string
Начиная с Python 3.8, вы можете использовать типичный синтаксис f-string, например f'{some_var=}, для быстрой отладки
#theory // Just Python
Начиная с Python 3.8, вы можете использовать типичный синтаксис f-string, например f'{some_var=}, для быстрой отладки
#theory // Just Python
Сколько может хранить переменных функция?
Python использует 2 байта для хранения локальных переменных в функциях. Теоретически это означает, что в функции может быть определено только 65536 переменных. Однако в python встроено удобное решение, которое можно использовать для хранения более 2 ^ 16 имен переменных. Следующий код демонстрирует, что происходит в стеке, когда определено более 65536 локальных переменных (Внимание: этот код печатает около 2 ^ 18 строк текста, так что будьте готовы!)
#theory // Just Python
Python использует 2 байта для хранения локальных переменных в функциях. Теоретически это означает, что в функции может быть определено только 65536 переменных. Однако в python встроено удобное решение, которое можно использовать для хранения более 2 ^ 16 имен переменных. Следующий код демонстрирует, что происходит в стеке, когда определено более 65536 локальных переменных (Внимание: этот код печатает около 2 ^ 18 строк текста, так что будьте готовы!)
#theory // Just Python
Print
Иногда print метод может выводить значения не сразу.
Это выведет wtfpython через 3 секунды из-за end аргумента, потому что выходной буфер очищается либо после обнаружения, \n либо когда программа завершает выполнение. Мы можем принудительно очистить буфер, передав flush=True аргумент.
#theory // Just Python
Иногда print метод может выводить значения не сразу.
Это выведет wtfpython через 3 секунды из-за end аргумента, потому что выходной буфер очищается либо после обнаружения, \n либо когда программа завершает выполнение. Мы можем принудительно очистить буфер, передав flush=True аргумент.
#theory // Just Python
Count
'abc'.count('') == 4. Вот приблизительная реализация count метода, которая сделала бы вещи более понятными.
Такое поведение обусловлено сопоставлением пустой подстроки ('') с фрагментами длины 0 в исходной строке.
#theory // Just Python
'abc'.count('') == 4. Вот приблизительная реализация count метода, которая сделала бы вещи более понятными.
Такое поведение обусловлено сопоставлением пустой подстроки ('') с фрагментами длины 0 в исходной строке.
#theory // Just Python
generator expressions
Попробуем использовать генераторные выражения (для получения среза будем использовать функцию islice из itertools, которая возвращает итератор по срезу)
#theory // Just Python
Попробуем использовать генераторные выражения (для получения среза будем использовать функцию islice из itertools, которая возвращает итератор по срезу)
#theory // Just Python
generator functions
Если предикатов фильтрации или обработчиков элементов списка много, то удобнее использовать генераторы. Они могут не дать прироста скорости, но помогут сэкономить память.
Генераторной фунцией в python называется функция, которая ведет себя как итератор. Для определения генераторной функции нужно использовать ключевое слово yield
#theory // Just Python
Если предикатов фильтрации или обработчиков элементов списка много, то удобнее использовать генераторы. Они могут не дать прироста скорости, но помогут сэкономить память.
Генераторной фунцией в python называется функция, которая ведет себя как итератор. Для определения генераторной функции нужно использовать ключевое слово yield
#theory // Just Python
Оператор walrus (:=)
В этом примере мы используем оператор walrus (:=) для одновременного присваивания значения переменной line и проверки условия внутри цикла while. Это позволяет нам сократить код, объединив операции присваивания и проверки в одну строку.
#theory // Just Python
В этом примере мы используем оператор walrus (:=) для одновременного присваивания значения переменной line и проверки условия внутри цикла while. Это позволяет нам сократить код, объединив операции присваивания и проверки в одну строку.
#theory // Just Python
Функция partial
В этом примере мы используем функцию partial для создания новых функций double и triple на основе функции multiply, фиксируя аргумент y на значениях 2 и 3 соответственно. Теперь новые функции могут быть вызваны с одним аргументом, в то время как фиксированный аргумент уже задан.
#theory // Just Python
В этом примере мы используем функцию partial для создания новых функций double и triple на основе функции multiply, фиксируя аргумент y на значениях 2 и 3 соответственно. Теперь новые функции могут быть вызваны с одним аргументом, в то время как фиксированный аргумент уже задан.
#theory // Just Python
Модуль asyncio
В этом примере мы используем модуль asyncio для создания асинхронной программы. Определяем асинхронную корутину my_coroutine, которая выполняет асинхронную операцию (в данном случае, ожидание 1 секунды). Затем определяем асинхронную функцию main, которая вызывает две корутины одновременно с помощью asyncio.gather. В конце мы используем asyncio.run для запуска основной функции main.
#theory // Just Python
В этом примере мы используем модуль asyncio для создания асинхронной программы. Определяем асинхронную корутину my_coroutine, которая выполняет асинхронную операцию (в данном случае, ожидание 1 секунды). Затем определяем асинхронную функцию main, которая вызывает две корутины одновременно с помощью asyncio.gather. В конце мы используем asyncio.run для запуска основной функции main.
#theory // Just Python
Контекстные менеджеры (with)
В этом примере мы используем контекстный менеджер with для автоматического открытия и закрытия файла. В блоке with мы читаем содержимое файла и выводим его на экран. После выхода из блока with файл будет автоматически закрыт, независимо от того, произошло исключение или нет.
#theory // Just Python
В этом примере мы используем контекстный менеджер with для автоматического открытия и закрытия файла. В блоке with мы читаем содержимое файла и выводим его на экран. После выхода из блока with файл будет автоматически закрыт, независимо от того, произошло исключение или нет.
#theory // Just Python
Декоратор @property
В этом примере мы определяем класс Circle с атрибутом radius и методом area, который вычисляет площадь окружности. Мы добавляем декоратор @property перед методом area, чтобы можно было обращаться к нему как к свойству объекта circle, без явного вызова метода.
#theory // Just Python
В этом примере мы определяем класс Circle с атрибутом radius и методом area, который вычисляет площадь окружности. Мы добавляем декоратор @property перед методом area, чтобы можно было обращаться к нему как к свойству объекта circle, без явного вызова метода.
#theory // Just Python
Сортировка HTML-элементов по названию
С помощью метода find_all мы можем сортировать все элементы, которые соответствуют некоторым критериям.
#theory // Just Python
С помощью метода find_all мы можем сортировать все элементы, которые соответствуют некоторым критериям.
#theory // Just Python
Сортировка HTML-элементов по CSS-селектору
С помощью методов select и select_one мы можем использовать некоторые селекторы CSS для сортировки элементов.
#theory // Just Python
С помощью методов select и select_one мы можем использовать некоторые селекторы CSS для сортировки элементов.
#theory // Just Python
Создания декораторов с помощью декоратора @wraps
В этом примере мы используем модуль functools и декоратор @wraps, чтобы создать декоратор my_decorator. Декоратор @wraps применяется к внутренней функции wrapper и копирует метаданные (имя функции, документацию и др.) из декорируемой функции func. Это полезно, чтобы сохранить исходные атрибуты функции и предотвратить их затирание. В примере мы декорируем функцию my_function с помощью @my_decorator и выполняем ее.
#theory // Just Python
В этом примере мы используем модуль functools и декоратор @wraps, чтобы создать декоратор my_decorator. Декоратор @wraps применяется к внутренней функции wrapper и копирует метаданные (имя функции, документацию и др.) из декорируемой функции func. Это полезно, чтобы сохранить исходные атрибуты функции и предотвратить их затирание. В примере мы декорируем функцию my_function с помощью @my_decorator и выполняем ее.
#theory // Just Python
Модуль concurrent.futures для параллельного выполнения задач
В этом примере мы используем модуль concurrent.futures для параллельного выполнения функции square над элементами списка numbers. Мы создаем пул потоков с помощью ThreadPoolExecutor и используем метод map для передачи каждого элемента из списка в функцию square. Результаты возвращаются в том порядке, в котором задачи были отправлены. Аналогично, мы можем использовать пул процессов с помощью ProcessPoolExecutor для выполнения задач в отдельных процессах.
#theory // Just Python
В этом примере мы используем модуль concurrent.futures для параллельного выполнения функции square над элементами списка numbers. Мы создаем пул потоков с помощью ThreadPoolExecutor и используем метод map для передачи каждого элемента из списка в функцию square. Результаты возвращаются в том порядке, в котором задачи были отправлены. Аналогично, мы можем использовать пул процессов с помощью ProcessPoolExecutor для выполнения задач в отдельных процессах.
#theory // Just Python