Дзен Python
Тим Петерс ещё в далёком 1999 году предложил PEP 20, который должен был содержать в себе 20 правил по написанию кода. Но в итоге их оказалось всего 19.
Последний пункт он предложил написать Гвидо Ван Россуму, однако он не написал ничего. В коммьюнити Python пришли к выводу, что разработчик языка хотел этим сказать, что никакие правила не являются абсолютными и везде есть исключения.
Посмотреть Дзен, или же философию Python, можно с помощью импорта модуля
#python #дзен
Тим Петерс ещё в далёком 1999 году предложил PEP 20, который должен был содержать в себе 20 правил по написанию кода. Но в итоге их оказалось всего 19.
Последний пункт он предложил написать Гвидо Ван Россуму, однако он не написал ничего. В коммьюнити Python пришли к выводу, что разработчик языка хотел этим сказать, что никакие правила не являются абсолютными и везде есть исключения.
Посмотреть Дзен, или же философию Python, можно с помощью импорта модуля
this
, а вариант перевода Дзена на русском языке здесь.#python #дзен
Красивый вывод
Мы очень часто отлаживаем код и пользуемся функцией print. Вывод в одну строку не всегда удобен. К примеру, когда мы делаем запрос серверу и получаем огромный json.
Встроенный модуль pprint поможет нам навести красоту. С каждым новым вложением он делает дополнительный отступ и вывод всегда радует глаз.
Вот параметры, которые принимает pprint.pprint:
object - объект форматирования,
stream=None - поток форматированного вывода,
indent=1 - отступ последующего уровня вложенности,
width=80 - ширина экрана печати,
depth=None - показывать уровней вложенности,
compact=False - компактное форматирование,
sort_dicts=True - сортировка словаря перед форматированием,
Мы даже можем переопределить стандартную функцию print написав
Мы очень часто отлаживаем код и пользуемся функцией print. Вывод в одну строку не всегда удобен. К примеру, когда мы делаем запрос серверу и получаем огромный json.
Встроенный модуль pprint поможет нам навести красоту. С каждым новым вложением он делает дополнительный отступ и вывод всегда радует глаз.
Вот параметры, которые принимает pprint.pprint:
object - объект форматирования,
stream=None - поток форматированного вывода,
indent=1 - отступ последующего уровня вложенности,
width=80 - ширина экрана печати,
depth=None - показывать уровней вложенности,
compact=False - компактное форматирование,
sort_dicts=True - сортировка словаря перед форматированием,
Мы даже можем переопределить стандартную функцию print написав
print = pprint.pprint
Выше приведен пример кода. Вы можете самостоятельно поэкспериментировать с модулем.Узнать все о функции
Современные редакторы кода всегда помогут правильно написать функцию, а некоторые даже их параметры. Но что делать, если нужно узнать точно описание функции, методы или прочитать документацию?
Для всех этих действий существует две функции dir() и help(). Первая возвращает список всех доступных для функции методов. Вторая возвращает текстовую документацию.
Очень удобно использовать dir() когда не знаешь, как точно пишется метод.
С помощью help() можно узнать все об объекте и его методах даже без подключения к интернету.
Современные редакторы кода всегда помогут правильно написать функцию, а некоторые даже их параметры. Но что делать, если нужно узнать точно описание функции, методы или прочитать документацию?
Для всех этих действий существует две функции dir() и help(). Первая возвращает список всех доступных для функции методов. Вторая возвращает текстовую документацию.
Очень удобно использовать dir() когда не знаешь, как точно пишется метод.
С помощью help() можно узнать все об объекте и его методах даже без подключения к интернету.
Копирование словарей и других объектов
Новички часто допускают такую ошибку при создании копии списка:
Почему так происходит?
Об этом — в завтрашнем посте. Пока что расскажу, как этого избежать:
У списка существует специальный метод copy(), который нужен как раз для таких случаев.
Но подобное работает не всегда! Если имеется множество вложенных списков, то надо сделать полное копирование импортировав модуль copy и воспользовавшись методом deepcopy().
Новички часто допускают такую ошибку при создании копии списка:
lst2 = lst1При работе с одним из словарей оказывается, что изменяются оба.
Почему так происходит?
Об этом — в завтрашнем посте. Пока что расскажу, как этого избежать:
У списка существует специальный метод copy(), который нужен как раз для таких случаев.
Но подобное работает не всегда! Если имеется множество вложенных списков, то надо сделать полное копирование импортировав модуль copy и воспользовавшись методом deepcopy().
Почему присвоение не является копированием?
Как и обещал — продолжение прошлого поста.
В python все является объектом. В этом легко убедится воспользовавшись функцией dir().
При присвоении в новую переменную отправляется ссылка на объект. А при изменении объекта ссылка на него не меняется.
Тут многие могут спросить про строки и числа, поэтому отвечаю — с ними то же самое. Просто при операциях не изменяется старый объект, а создается новый. Все это можно проследить воспользовавшись функцией id(), которая показывает номер объекта.
Интересно то, что за частью чисел в языке на программном уровне закреплена ссылка на объект. Можете попробовать сами.
Как и обещал — продолжение прошлого поста.
В python все является объектом. В этом легко убедится воспользовавшись функцией dir().
При присвоении в новую переменную отправляется ссылка на объект. А при изменении объекта ссылка на него не меняется.
Тут многие могут спросить про строки и числа, поэтому отвечаю — с ними то же самое. Просто при операциях не изменяется старый объект, а создается новый. Все это можно проследить воспользовавшись функцией id(), которая показывает номер объекта.
Интересно то, что за частью чисел в языке на программном уровне закреплена ссылка на объект. Можете попробовать сами.
Форматирование строк
Часто приходится работать со строкой и выводить различные данные. Не проблема, когда нужно вывести что-то короткое:
В python3 есть очень удобный способ. Нужно поставить f перед строкой а в фигурных скобках {} написать нужную переменную. Если же эти скобки понадобились в тексте, то достаточно написать их дважды, чтобы экранировать.
Еще один способ — воспользоваться методом format(). Суть та же, но на этот раз без добавления f и добавления переменных как аргументов.
Часто приходится работать со строкой и выводить различные данные. Не проблема, когда нужно вывести что-то короткое:
print('Hello', name)
. Но чаще строки нужны для отображения на формах, а не через print(). Еще чаще вывод должен быть намного сложнее.В python3 есть очень удобный способ. Нужно поставить f перед строкой а в фигурных скобках {} написать нужную переменную. Если же эти скобки понадобились в тексте, то достаточно написать их дважды, чтобы экранировать.
Еще один способ — воспользоваться методом format(). Суть та же, но на этот раз без добавления f и добавления переменных как аргументов.
Кортежи - tuple()
По своей сути кортежи это тот же список, но который имеет ряд преимуществ (если его правильно применять).
Кортежи занимают меньше места, в отличии от списка, но тюплы не изменяются. Их неизменность применяется для большей безопасности. Кроме того, кортежи быстрее работают.
На самом деле каждый из нас использовал tuple, просто не знал, что он им является. При создании списков используются квадратные скобки или функция list(), а для кортежей обычные скобки или tuple().
Как и списки кортежи можно сравнивать между собой. Правила при этом те же.
Используйте tuple, если вам нужен неизменяемый список или нужно получить и сразу же работать со значениями.
По своей сути кортежи это тот же список, но который имеет ряд преимуществ (если его правильно применять).
Кортежи занимают меньше места, в отличии от списка, но тюплы не изменяются. Их неизменность применяется для большей безопасности. Кроме того, кортежи быстрее работают.
На самом деле каждый из нас использовал tuple, просто не знал, что он им является. При создании списков используются квадратные скобки или функция list(), а для кортежей обычные скобки или tuple().
Как и списки кортежи можно сравнивать между собой. Правила при этом те же.
Используйте tuple, если вам нужен неизменяемый список или нужно получить и сразу же работать со значениями.
Как построить карьеру в Яндексе?
Можно пересмотреть все туториалы на Ютубе и изучить тонну информации, но так и не попасть в Яндекс. А можно просто послушать того, кто там работает, последовать его советам и попасть в штат.
Завтра, 4 марта, в 10:00 открывается комната в ClubHouse, где расскажут всё про работу в Яндексе: как туда попасть, сколько платят (и в чем особенность системы опционов), и как вырасти до топ-менеджера.
Сохраните эту информацию к себе в закладки, чтобы не пропустить самую полезную комнату в ClubHouse.
Можно пересмотреть все туториалы на Ютубе и изучить тонну информации, но так и не попасть в Яндекс. А можно просто послушать того, кто там работает, последовать его советам и попасть в штат.
Завтра, 4 марта, в 10:00 открывается комната в ClubHouse, где расскажут всё про работу в Яндексе: как туда попасть, сколько платят (и в чем особенность системы опционов), и как вырасти до топ-менеджера.
Сохраните эту информацию к себе в закладки, чтобы не пропустить самую полезную комнату в ClubHouse.
Выполнить строку - eval()
Говорят, каждый программист должен написать калькулятор. Но если вы python разработчик, то вы можете сделать это в одну строчку:
eval() создана чтобы выполнять выражения и функции, обязательно возвращая какой-то результат. Так можно облегчить написание кода, принимая строкой словари, списки.
Единственное, что не умеет eval - присваивать что-то переменным. Зато она может их использовать!
Правильное применение функции сильно упростит вам жизнь.
Говорят, каждый программист должен написать калькулятор. Но если вы python разработчик, то вы можете сделать это в одну строчку:
print(eval(input()))Что за eval и почему это работает?
eval() создана чтобы выполнять выражения и функции, обязательно возвращая какой-то результат. Так можно облегчить написание кода, принимая строкой словари, списки.
Единственное, что не умеет eval - присваивать что-то переменным. Зато она может их использовать!
Правильное применение функции сильно упростит вам жизнь.
Распаковка
Неудобно каждый раз для вывода объединять строки через join() или тем более как-то объединять числа. Мы можем распаковать кортеж или список, воспользовавшись звездочкой *. Со словарями данный способ не работает.
На самом деле применение более широкое. Звездочка может также собирать несколько значений в одну переменную. Очень удобно применять для функций с бесконечным количеством аргументов или только с именованными аргументами.
Неудобно каждый раз для вывода объединять строки через join() или тем более как-то объединять числа. Мы можем распаковать кортеж или список, воспользовавшись звездочкой *. Со словарями данный способ не работает.
На самом деле применение более широкое. Звездочка может также собирать несколько значений в одну переменную. Очень удобно применять для функций с бесконечным количеством аргументов или только с именованными аргументами.
В одну строчку
Python гибкий язык и позволяет многое сделать в одну строчку. К примеру, матрицу из одних нулей. Или постоянно возрастающий список.
Такие методы лучше использовать когда надо сгенерировать что-то маленькое или нужное. Если использовать нужно сейчас и строго по одному, то лучше использовать итераторы. Об итераторах подробнее расскажем чуть позже.
Примеры списочных выражений на картинке. В следующий раз не придется набирать одинаковый текст несколько раз.
Python гибкий язык и позволяет многое сделать в одну строчку. К примеру, матрицу из одних нулей. Или постоянно возрастающий список.
Такие методы лучше использовать когда надо сгенерировать что-то маленькое или нужное. Если использовать нужно сейчас и строго по одному, то лучше использовать итераторы. Об итераторах подробнее расскажем чуть позже.
Примеры списочных выражений на картинке. В следующий раз не придется набирать одинаковый текст несколько раз.
В одну строку - итератор
Вы уже знаете, как писать многие крутые штуки в одну строчку. Но можно ускорить работу кода, используя итераторы.
Итератор - объект, который хранит начало, конец, текущий элемент и правило преобразований. В итоге мы можем получать только новые значения.
Преимущество в том, что итераторы потребляют намного меньше памяти, чем списки и кортежи.
Вы уже точно знаете один итератор и даже пользуетесь им - range().
А есть еще один очень полезный - map(). Он принимает два аргумента, функцию для задания правила преобразования и что-то, что требуется преобразовать.
Вы уже знаете, как писать многие крутые штуки в одну строчку. Но можно ускорить работу кода, используя итераторы.
Итератор - объект, который хранит начало, конец, текущий элемент и правило преобразований. В итоге мы можем получать только новые значения.
Преимущество в том, что итераторы потребляют намного меньше памяти, чем списки и кортежи.
Вы уже точно знаете один итератор и даже пользуетесь им - range().
А есть еще один очень полезный - map(). Он принимает два аргумента, функцию для задания правила преобразования и что-то, что требуется преобразовать.
This media is not supported in your browser
VIEW IN TELEGRAM
Знаете, какую ошибку делают все русскоговорящие в английском языке?
Когда мы чего-то не понимаем, мы обычно говорим: “What?”
❌Но это же совсем не вежливо! Как же лучше сказать? Например,
✅“Sorry” или “Pardon”
✅“Come again”
✅“Can you repeat that?”
⠀
Хотите еще один лайфак? Если вы прямо сейчас переведете свой телефон на английский язык, то в течение недели сможете выучить 100 новых слов без особых усилий. Поверьте, вы знаете свой телефон наизусть! 👌
⠀
Используйте свое время в интернете с пользой! Перестаньте откладывать свою мечту заговорить на английском на потом. На бесплатном вебинаре от онлайн-школы English Tochka вы научитесь запоминать по 100 слов час, исправите свой акцент, а также избавитесь от языкового барьера! 🇺🇸
⠀
Вебинар будет полезен как новичкам, так и тем, кто уже давно изучает английский
⏰Встречаемся 9-го марта в 20.00 по Мск
⠀
👉Регистрируйтесь!
Сделайте шаг к мечте прямо сейчас!
Когда мы чего-то не понимаем, мы обычно говорим: “What?”
❌Но это же совсем не вежливо! Как же лучше сказать? Например,
✅“Sorry” или “Pardon”
✅“Come again”
✅“Can you repeat that?”
⠀
Хотите еще один лайфак? Если вы прямо сейчас переведете свой телефон на английский язык, то в течение недели сможете выучить 100 новых слов без особых усилий. Поверьте, вы знаете свой телефон наизусть! 👌
⠀
Используйте свое время в интернете с пользой! Перестаньте откладывать свою мечту заговорить на английском на потом. На бесплатном вебинаре от онлайн-школы English Tochka вы научитесь запоминать по 100 слов час, исправите свой акцент, а также избавитесь от языкового барьера! 🇺🇸
⠀
Вебинар будет полезен как новичкам, так и тем, кто уже давно изучает английский
⏰Встречаемся 9-го марта в 20.00 по Мск
⠀
👉Регистрируйтесь!
Сделайте шаг к мечте прямо сейчас!
Заглушки
Для создания пустых функций и классов есть сразу два способа соответствующих правилам PEP: "pass" и "...". Предпочтительнее использовать первый вариант. Он означает буквальным счетом пустоту, даже применить функции dir() или help() не получится. А вот три точки - объект.
Их применение более широкое. Мы видели точки, когда выводили бесконечный список. Но то, был просто вывод, а не наш объект. Ellipsis применяется так же для создания пустых списков. Он показывает, что внутри не что-то одно, а много. На практике его используют лишь в документации и при создании все тех же пустых функций.
На картинке пример программы проверяющий пароль от юзера. Сохранение в БД мы еще не решили как писать, поэтому просто создали заглушку.
Для создания пустых функций и классов есть сразу два способа соответствующих правилам PEP: "pass" и "...". Предпочтительнее использовать первый вариант. Он означает буквальным счетом пустоту, даже применить функции dir() или help() не получится. А вот три точки - объект.
Их применение более широкое. Мы видели точки, когда выводили бесконечный список. Но то, был просто вывод, а не наш объект. Ellipsis применяется так же для создания пустых списков. Он показывает, что внутри не что-то одно, а много. На практике его используют лишь в документации и при создании все тех же пустых функций.
На картинке пример программы проверяющий пароль от юзера. Сохранение в БД мы еще не решили как писать, поэтому просто создали заглушку.
Привет! На связи админ канала
Постоянно кодить — это хорошо, но отдыхать тоже нужно. Поэтому специально под это дело мы сделали второй канал с айти-мемами и говнокодом.
Заходите, смейтесь и подписывайтесь: @conhum
Постоянно кодить — это хорошо, но отдыхать тоже нужно. Поэтому специально под это дело мы сделали второй канал с айти-мемами и говнокодом.
Заходите, смейтесь и подписывайтесь: @conhum
Символы экранирования
При выводе строки иногда появляются различные непонятные нам символы вроде '\n'. Подобные записи всегда начинаются с '\' (обратный слеш), и могут состоять из нескольких символов, но Python считает их за один. Если эту тему изучить, то можно делать интересные вещи в одну строчку, либо красиво оформлять вывод.
Вод пример самых частых символов:
\\ - Сам символ обратного слеша (остается один символ \)
\' - Апостроф (остается один ')
\" - Кавычка (остается один символ ")
\n - Новая строка (перевод строки)
\r - Возврат каретки
\t - Горизонтальная табуляция
Но для тех, кто этого не знает могут возникнуть проблемы. Например, если вы попробуете задать адрес на вашем компьютере. А он состоит из символов '/', вам интерпретатор выдаст ошибку.
Можно, конечно, воспользоваться нашим знанием и написать, экранировав все слеши, но есть более простой способ отменить экранирование - поставить r перед строчкой.
При выводе строки иногда появляются различные непонятные нам символы вроде '\n'. Подобные записи всегда начинаются с '\' (обратный слеш), и могут состоять из нескольких символов, но Python считает их за один. Если эту тему изучить, то можно делать интересные вещи в одну строчку, либо красиво оформлять вывод.
Вод пример самых частых символов:
\\ - Сам символ обратного слеша (остается один символ \)
\' - Апостроф (остается один ')
\" - Кавычка (остается один символ ")
\n - Новая строка (перевод строки)
\r - Возврат каретки
\t - Горизонтальная табуляция
Но для тех, кто этого не знает могут возникнуть проблемы. Например, если вы попробуете задать адрес на вашем компьютере. А он состоит из символов '/', вам интерпретатор выдаст ошибку.
Можно, конечно, воспользоваться нашим знанием и написать, экранировав все слеши, но есть более простой способ отменить экранирование - поставить r перед строчкой.
Оформление кода
Мы уже писали, что в python есть своя философия. Именно отсюда берутся определенные правила и стандарты. В пайтон такое соглашение назвали PEP 8 (читается - пэп).
Соответствие пепу позволяет видеть основную структуру вашего кода другим разработчикам. Не нужно привыкать к другому оформлению кода. Если вы привыкли как-то оформлять код, а увидели что-то совершенно другое, то вы поймете. К
Официальная документация по PEP 8.Основные моменты:
Используйте пробелы, разрешается использование табов, но смешивание запрещено. Отступ соответствует 4 пробелам. Хорошие редакторы кода автоматически заменяют табы на пробелы.
Вокруг операторов +, -, =, *, /, ** должны быть пробелы.
Строка не должна превышать 101 символа
Импорты можно делать только по одному на строку! При этом из одного модуля можно доставать несколько нужных объектов. Порядок тоже важен:
- стандартные библиотеки;
- сторонние;
- созданные вами
Мы уже писали, что в python есть своя философия. Именно отсюда берутся определенные правила и стандарты. В пайтон такое соглашение назвали PEP 8 (читается - пэп).
Соответствие пепу позволяет видеть основную структуру вашего кода другим разработчикам. Не нужно привыкать к другому оформлению кода. Если вы привыкли как-то оформлять код, а увидели что-то совершенно другое, то вы поймете. К
Официальная документация по PEP 8.Основные моменты:
Используйте пробелы, разрешается использование табов, но смешивание запрещено. Отступ соответствует 4 пробелам. Хорошие редакторы кода автоматически заменяют табы на пробелы.
Вокруг операторов +, -, =, *, /, ** должны быть пробелы.
Строка не должна превышать 101 символа
Импорты можно делать только по одному на строку! При этом из одного модуля можно доставать несколько нужных объектов. Порядок тоже важен:
- стандартные библиотеки;
- сторонние;
- созданные вами
Бесконечные списки
Мы уже рассказывали про важность копирования списков. Но именно из-за такой процедуры появляется возможность создавать бесконечные списки. Дойти до конца такого списка невозможно, при этом он потребляет минимум памяти. Попробуйте создать сами.
На картинке (см. выше) видно создание. А затем мы пробуем модуль copy, чтобы узнать сможет ли он сделать глубокое копирование бесконечного объекта?
Применить знание особо негде, но данное задание помогает понять работу списков. Возможно, такой вопрос задаст вам рекрутер на одном из собеседований.
Мы уже рассказывали про важность копирования списков. Но именно из-за такой процедуры появляется возможность создавать бесконечные списки. Дойти до конца такого списка невозможно, при этом он потребляет минимум памяти. Попробуйте создать сами.
На картинке (см. выше) видно создание. А затем мы пробуем модуль copy, чтобы узнать сможет ли он сделать глубокое копирование бесконечного объекта?
Применить знание особо негде, но данное задание помогает понять работу списков. Возможно, такой вопрос задаст вам рекрутер на одном из собеседований.
Проверка версии в python
Сколько раз уже была такая ситуация: даёшь код знакомому, но версии не совпадают. У кого-то новее, у кого-то старше. И чтобы в такую ситуацию не попасть, можно проверить текущую версию языка и отменить запуск в случае чего. Поможет в этом значение version_info, из библиотеки sys.
Хороший способ узнать нужную версию, особенно если на ПК их несколько.
Сколько раз уже была такая ситуация: даёшь код знакомому, но версии не совпадают. У кого-то новее, у кого-то старше. И чтобы в такую ситуацию не попасть, можно проверить текущую версию языка и отменить запуск в случае чего. Поможет в этом значение version_info, из библиотеки sys.
Хороший способ узнать нужную версию, особенно если на ПК их несколько.
Анонимные функции
Часто функции нужны только один раз, причем короткие. И избыточно создавать под них функцию и придумывать ей имя.
Для таких случаев существуют лямбда функции, так выглядит их создание:
Часто функции нужны только один раз, причем короткие. И избыточно создавать под них функцию и придумывать ей имя.
Для таких случаев существуют лямбда функции, так выглядит их создание:
<аргументы>: <выражение>Такие функции обязан знать каждый программист, их применение сильно сокращает код.
Функции высшего порядка
Функции высшего порядка - функции принимающие или возвращающие другие функции. Очень говорящее название, запомнить очень просто
Чуть ранее мы говорили про lambda, они очень хорошо взаимодействуют с высшими функциями. Про одну из них мы говорили - map(). Она может принимать в себя лямбду, но это не дает такой большой функциональности.
Еще одна функция-итератор - filter()
Она поможет отфильтровать списки или итераторы. Первым принимает функцию, если она возвращает True, то пропускает элемент, вторым аргументом принимает список или итератор.
Не забывайте комбинировать функции!
Функции высшего порядка - функции принимающие или возвращающие другие функции. Очень говорящее название, запомнить очень просто
Чуть ранее мы говорили про lambda, они очень хорошо взаимодействуют с высшими функциями. Про одну из них мы говорили - map(). Она может принимать в себя лямбду, но это не дает такой большой функциональности.
Еще одна функция-итератор - filter()
Она поможет отфильтровать списки или итераторы. Первым принимает функцию, если она возвращает True, то пропускает элемент, вторым аргументом принимает список или итератор.
Не забывайте комбинировать функции!