Копирование объектов
При стандартном присваивании обычно новый объект не создается, а лишь копируется ссылка на уже имеющийся. Если использовать
Если же использовать
При стандартном присваивании обычно новый объект не создается, а лишь копируется ссылка на уже имеющийся. Если использовать
copy.copy(), произойдет поверхностное копирование, т.е. создастся новый объект, но его ссылки на другие объекты будут те же.Если же использовать
copy.deepcopy(), то получатся "настоящие" копии объекта и всех его ссылок.Избегайте вложенных циклов с помощью product
Когда программа становится сложной, неизбежно приходится писать вложенные циклы. Однако вложенные циклы делают программы более сложными для чтения и сопровождения.
К счастью, в Python всегда можно избежать вложенных циклов с помощью встроенной функции product().
Например, у нас есть следующая программа, которая содержит трехуровневые вложенные циклы for.
Чтобы сделать код более аккуратным и чистым, мы можем использовать функцию product(), которая находится в модуле itertools, для оптимизации кода.
Когда программа становится сложной, неизбежно приходится писать вложенные циклы. Однако вложенные циклы делают программы более сложными для чтения и сопровождения.
К счастью, в Python всегда можно избежать вложенных циклов с помощью встроенной функции product().
Например, у нас есть следующая программа, которая содержит трехуровневые вложенные циклы for.
Чтобы сделать код более аккуратным и чистым, мы можем использовать функцию product(), которая находится в модуле itertools, для оптимизации кода.
Пишем простого эхо-бота на Python
Инструкция по созданию бота:
1) Заходим в бота @BotFather
2) запускаем его(/start)
3) выбираем команду /newbot
4) даем имя боту
5) после этого придумываем ему юзернейм
6) и наконец-таки получаем токен для нашего бота, который вставляем в свой код.
Теперь заходим в среду написания кода, вставляем наш код с картинки(для особо ленивых код будет в комментариях), вставляем свой токен и запускаем программу, после чего заходим в телеграм, находим в поиске вашего бота и запускаем его.
Перед запуском программы необходимо установить пакет telebot(pip install telebot).
Наш с вами бот будет работать в роли попугая, так как будет повторять любую вашу фразу.
Инструкция по созданию бота:
1) Заходим в бота @BotFather
2) запускаем его(/start)
3) выбираем команду /newbot
4) даем имя боту
5) после этого придумываем ему юзернейм
6) и наконец-таки получаем токен для нашего бота, который вставляем в свой код.
Теперь заходим в среду написания кода, вставляем наш код с картинки(для особо ленивых код будет в комментариях), вставляем свой токен и запускаем программу, после чего заходим в телеграм, находим в поиске вашего бота и запускаем его.
Перед запуском программы необходимо установить пакет telebot(pip install telebot).
Наш с вами бот будет работать в роли попугая, так как будет повторять любую вашу фразу.
Логические значения чисел
Функция bool() преобразует объект в логическое значение. Язык также позволяет производить логические операции and, or, not с числами.
При преобразовании чисел к логическим значениям все числа кроме нуля преобразовываются в True. Лишь 0 переходит в False.
Логические операции с числами работают согласно таблицам истинности операторов.
Функция bool() преобразует объект в логическое значение. Язык также позволяет производить логические операции and, or, not с числами.
При преобразовании чисел к логическим значениям все числа кроме нуля преобразовываются в True. Лишь 0 переходит в False.
Логические операции с числами работают согласно таблицам истинности операторов.
Лимит рекурсии
В Python иногда возникает
Но надо помнить, что делать это — опасное занятие, ибо каждый новый вызов занимает достаточно много памяти. В реальных проектах нужно стараться использовать не рекурсию, а обычные циклы.
В Python иногда возникает
RecursionError во время создания рекурсивных алгоритмов (даже при решении простых университетских задач), однако с помощью модуля sys можно изменить максимальную глубину рекурсии, чтобы избежать появления этой ошибки.Но надо помнить, что делать это — опасное занятие, ибо каждый новый вызов занимает достаточно много памяти. В реальных проектах нужно стараться использовать не рекурсию, а обычные циклы.
Beautiful soup
Когда вы вытаскиваете HTML с какого-то сайта, то сначала проводите его разбор и отсекаете все ненужное. Beautiful Soup — это Python-библиотека по сбору данных из HTML и XML-файлов. В ней представлены простые методы для навигации, поиска и парсинга. Это очень мощная библиотека, которая умеет обрабатывать все виды HTML, даже если он сломан. Уж поверьте моему опыту, HTML ломается довольно часто, поэтому такая функция окажется как нельзя кстати.
Beautiful Soup парсит все, что захотите. С его помощью вы, например, можете вытащить все ссылки или найти заголовок таблицы, выделенный жирным. На первой картинке приведен HTML, а на второй - несколько примеров работы с ним. Документация доступна по ссылке.
Когда вы вытаскиваете HTML с какого-то сайта, то сначала проводите его разбор и отсекаете все ненужное. Beautiful Soup — это Python-библиотека по сбору данных из HTML и XML-файлов. В ней представлены простые методы для навигации, поиска и парсинга. Это очень мощная библиотека, которая умеет обрабатывать все виды HTML, даже если он сломан. Уж поверьте моему опыту, HTML ломается довольно часто, поэтому такая функция окажется как нельзя кстати.
Beautiful Soup парсит все, что захотите. С его помощью вы, например, можете вытащить все ссылки или найти заголовок таблицы, выделенный жирным. На первой картинке приведен HTML, а на второй - несколько примеров работы с ним. Документация доступна по ссылке.
Удаление красного, зеленого и синего канала из цветного изображения в Python
Чтобы удалить красный канал из цветного изображения, считайте изображение в массив BGR с помощью cv2.imread() и присвойте нули 2D-массиву, соответствующему красному каналу.
В этом примере мы удалим красный канал со следующего изображения.
Ознакомиться подробнее c удалением других каналов можно здесь.
Чтобы удалить красный канал из цветного изображения, считайте изображение в массив BGR с помощью cv2.imread() и присвойте нули 2D-массиву, соответствующему красному каналу.
В этом примере мы удалим красный канал со следующего изображения.
Ознакомиться подробнее c удалением других каналов можно здесь.
Переворот изображения по вертикали
В следующем примере мы передаем FLIP_LEFT_RIGHT в качестве аргумента методу транспонирования, чтобы перевернуть изображение по вертикали или слева направо и справа налево.
Ознакомиться подробнее можно здесь.
В следующем примере мы передаем FLIP_LEFT_RIGHT в качестве аргумента методу транспонирования, чтобы перевернуть изображение по вертикали или слева направо и справа налево.
Ознакомиться подробнее можно здесь.
#вопросы_с_собеседований
Что значит *args, **kwargs? И зачем нам их использовать?
Мы используем *args, когда неуверены, сколько аргументов будет передано функции, или если хотим передать сохраненный список или кортеж аргументов функции.
**kwargs используется, когда мы не знаем, сколько аргументов ключевых слов будет передано, а также он может быть использован для передачи значений словаря в качестве аргументов ключевых слов. Идентификаторы args и kwargs необязательны, вы можете изменить их на другие, типа *другой **пример, но лучше использовать имя по умолчанию.
Что значит *args, **kwargs? И зачем нам их использовать?
Мы используем *args, когда неуверены, сколько аргументов будет передано функции, или если хотим передать сохраненный список или кортеж аргументов функции.
**kwargs используется, когда мы не знаем, сколько аргументов ключевых слов будет передано, а также он может быть использован для передачи значений словаря в качестве аргументов ключевых слов. Идентификаторы args и kwargs необязательны, вы можете изменить их на другие, типа *другой **пример, но лучше использовать имя по умолчанию.
Хэширование
Хэш — это целое число фиксированного размера, которое идентифицирует определенное значение. Каждое уникальное значение должно иметь свой собственный хэш.
Для хэширования значений есть встроенная (её не надо устанавливать или импортировать) функция
Однако изменяемые объекты по типу списков и словарей нельзя хэшировать — интерпретатор выдаст ошибку.
Кстати, есть две пасхалки. Хэш бесконечности равен первым цифрам числа Пи, а хэш Not a Number равен нулю.
А ещё бывают коллизии: например, хэши чисел -1 и -2 одинаковы.
Хэш — это целое число фиксированного размера, которое идентифицирует определенное значение. Каждое уникальное значение должно иметь свой собственный хэш.
Для хэширования значений есть встроенная (её не надо устанавливать или импортировать) функция
hash(). Используется в основном для сравнения разных объектов — сравнивать хэши легче и выгоднее.Однако изменяемые объекты по типу списков и словарей нельзя хэшировать — интерпретатор выдаст ошибку.
Кстати, есть две пасхалки. Хэш бесконечности равен первым цифрам числа Пи, а хэш Not a Number равен нулю.
А ещё бывают коллизии: например, хэши чисел -1 и -2 одинаковы.
#вопросы_с_собеседований
Какие нюансы есть в использовании чисел как ключей?
Числовые ключи в словарях подчиняются правилам сравнения чисел. Таким образом, int(1) и float(1.0) считаются одинаковым ключом. Однако из-за того, что значения типа float сохраняются приближенно, не рекомендуется использовать их в качестве ключей.
Какие нюансы есть в использовании чисел как ключей?
Числовые ключи в словарях подчиняются правилам сравнения чисел. Таким образом, int(1) и float(1.0) считаются одинаковым ключом. Однако из-за того, что значения типа float сохраняются приближенно, не рекомендуется использовать их в качестве ключей.
Как выполняется обработка исключений в Python?
Для обработки исключений Python предоставляет конструкцию из трех слов: try, except и finally.
Синтаксис выглядит примерно так:
На картинке представлен упрощенный пример такой конструкции. Здесь блок try терпит неудачу, поскольку мы не можем складывать целые числа со строками. Блок except устанавливает val = 10, а затем блок finally выводит complete.
Для обработки исключений Python предоставляет конструкцию из трех слов: try, except и finally.
Синтаксис выглядит примерно так:
try:
# попробовать сделать это
except:
# если блок try не сработал, попробовать это
finally:
# всегда делать этоНа картинке представлен упрощенный пример такой конструкции. Здесь блок try терпит неудачу, поскольку мы не можем складывать целые числа со строками. Блок except устанавливает val = 10, а затем блок finally выводит complete.