Переменная Шредингера (ч.2)
При определении функции внутри цикла, которая использует переменную цикла в своем теле, закрытие функции цикла привязывается к переменной, а не к ее значению. Функция ищет x в окружающем контексте, вместо того, чтобы использовать значение x во время создания функции. Итак, все функции используют для вычислений последнее значение, присвоенное переменной. Мы можем видеть, что он использует x из окружающего контекста (т.е. не локальную переменную) с:
При определении функции внутри цикла, которая использует переменную цикла в своем теле, закрытие функции цикла привязывается к переменной, а не к ее значению. Функция ищет x в окружающем контексте, вместо того, чтобы использовать значение x во время создания функции. Итак, все функции используют для вычислений последнее значение, присвоенное переменной. Мы можем видеть, что он использует x из окружающего контекста (т.е. не локальную переменную) с:
⚡️ Турция раздаёт 2456 билетов бесплатно. Взяли и поехали. А в 5-звездочном отеле можно пожить бесплатно — надо просто использовать специальный код. Кстати, билет в любую страну можно купить с 90% скидкой — но об этом не говорят.
И такие лазейки публикуют в Travel Media. Это лучший канал про путешествия, визы и заграницу.
Внутри: как летать по ценам сотрудников, что сделать, чтобы Airbnb бесплатно дал жилье и как путешествовать без заграника.
Лето — уже близко. Дерзайте: Travel Media.
И такие лазейки публикуют в Travel Media. Это лучший канал про путешествия, визы и заграницу.
Внутри: как летать по ценам сотрудников, что сделать, чтобы Airbnb бесплатно дал жилье и как путешествовать без заграника.
Лето — уже близко. Дерзайте: Travel Media.
Переменная Шредингера (ч.3)
Поскольку x это глобальное значение, мы можем изменить значение, которое funcs будет искать и возвращать, обновив x.
Чтобы получить желаемое поведение, вы можете передать переменную цикла в качестве именованной переменной в функцию. Почему это работает? Потому что это определит переменную внутри области видимости функции. Он больше не будет обращаться к окружающей (глобальной) области видимости для поиска значений переменных, но создаст локальную переменную, которая хранит значение x на данный момент времени.
Поскольку x это глобальное значение, мы можем изменить значение, которое funcs будет искать и возвращать, обновив x.
Чтобы получить желаемое поведение, вы можете передать переменную цикла в качестве именованной переменной в функцию. Почему это работает? Потому что это определит переменную внутри области видимости функции. Он больше не будет обращаться к окружающей (глобальной) области видимости для поиска значений переменных, но создаст локальную переменную, которая хранит значение x на данный момент времени.
Проблема с куриным яйцом (ч.1)
Итак, какой "окончательный" базовый класс?
type это метакласс в Python. Все является object на Python, который включает в себя классы, а также их объекты (экземпляры). Класс type - это метакласс class object, и каждый класс (включая type) прямо или косвенно унаследован от object.
Итак, какой "окончательный" базовый класс?
type это метакласс в Python. Все является object на Python, который включает в себя классы, а также их объекты (экземпляры). Класс type - это метакласс class object, и каждый класс (включая type) прямо или косвенно унаследован от object.
Нейросети сейчас — как интернет в 1990 году. Тот, кто первым в них разберется — сможет что угодно и сорвёт куш.
Сами посмотрите: MidJourney рисует кручего любого дизайнера, ChatGPT сделает всю работу за вас, а DeepMind умеет лечить как врач.
А чтобы разобраться уже сегодня — держите в подписках Киллер-фича. Это лучший канал про технологии, ИИ и нейросети.
Там на пальцах рассказывают, как заставить нейронки работать на вас, как использовать ChatGPT и что не так с новым ИИ от Google.
Подписывайтесь, такие знания в 2023 году — на вес золота: Киллер-фича.
Сами посмотрите: MidJourney рисует кручего любого дизайнера, ChatGPT сделает всю работу за вас, а DeepMind умеет лечить как врач.
А чтобы разобраться уже сегодня — держите в подписках Киллер-фича. Это лучший канал про технологии, ИИ и нейросети.
Там на пальцах рассказывают, как заставить нейронки работать на вас, как использовать ChatGPT и что не так с новым ИИ от Google.
Подписывайтесь, такие знания в 2023 году — на вес золота: Киллер-фича.
Проблема с куриным яйцом (ч.2)
Среди object и type нет реального базового класса. Путаница в приведенных выше фрагментах возникает из-за того, что мы думаем об этих взаимосвязях (issubclass и isinstance) в терминах классов Python. Связь между object и type не может быть воспроизведена в чистом python.
Среди object и type нет реального базового класса. Путаница в приведенных выше фрагментах возникает из-за того, что мы думаем об этих взаимосвязях (issubclass и isinstance) в терминах классов Python. Связь между object и type не может быть воспроизведена в чистом python.
Проблема с куриным яйцом (ч.3)
Чтобы быть более точным, следующие взаимосвязи не могут быть воспроизведены в чистом Python:
Класс A является экземпляром класса B, а класс B является экземпляром класса A.
Класс A является экземпляром самого себя.
Эти отношения между object и type (оба являются экземплярами друг друга, а также самих себя)
Чтобы быть более точным, следующие взаимосвязи не могут быть воспроизведены в чистом Python:
Класс A является экземпляром класса B, а класс B является экземпляром класса A.
Класс A является экземпляром самого себя.
Эти отношения между object и type (оба являются экземплярами друг друга, а также самих себя)
Отношения подклассов
Отношения подклассов не обязательно являются транзитивными в Python. Любому разрешено определять свой собственный, произвольный subclasscheck в метаклассе.
Когда issubclass(cls, Hashable) вызывается, он просто ищет не ложный "hash" метод в cls или что-либо, от чего он наследуется.
Поскольку object является хешируемым, но list не является хешируемым, это нарушает отношение транзитивности.
Отношения подклассов не обязательно являются транзитивными в Python. Любому разрешено определять свой собственный, произвольный subclasscheck в метаклассе.
Когда issubclass(cls, Hashable) вызывается, он просто ищет не ложный "hash" метод в cls или что-либо, от чего он наследуется.
Поскольку object является хешируемым, но list не является хешируемым, это нарушает отношение транзитивности.
Равенство методов и идентичность (ч.1)
Функции - это дескрипторы. Всякий раз, когда к функции обращаются как к атрибуту, вызывается дескриптор, создающий объект метода, который "связывает" функцию с объектом, владеющим атрибутом. При вызове метод вызывает функцию, неявно передавая связанный объект в качестве первого аргумента (именно так мы получаем self в качестве первого аргумента, несмотря на то, что не передаем его явно).
Функции - это дескрипторы. Всякий раз, когда к функции обращаются как к атрибуту, вызывается дескриптор, создающий объект метода, который "связывает" функцию с объектом, владеющим атрибутом. При вызове метод вызывает функцию, неявно передавая связанный объект в качестве первого аргумента (именно так мы получаем self в качестве первого аргумента, несмотря на то, что не передаем его явно).
Python — один из самых популярных языков в мире, а разработчики на нём востребованы в самых разных IT-направлениях. Познакомьтесь с различными сферами применения языка, узнайте, какие навыки сейчас востребованы на фрилансе и как начать работать на удалёнке, на бесплатном онлайн-интенсиве: ▶️https://epic.st/X_We7
Вы научитесь:
📍 Получать данные с сайтов, которые помогают аналитикам и владельцам бизнеса изучать рынок, конкурентов и динамику цен.
📍 Работать с API — специальными программными инструкциями, с помощью которых можно получить данные с сайтов.
📍 Парсить HTML. Узнаете, как автоматизировать сбор информации прямо из HTML-кода сайта.
📍 Автоматически выделять важное из огромных массивов данных с помощью Python.
📍 Писать программы для автоматической отправки важных писем по расписанию, тем самым автоматизировать email-рассылки.
📍 Разбираться в рынке фриланса на Python.
Спикером выступит руководитель направления по исследованию данных в Сбере Анастасия Борнева. Она с 2018 года занимается автоматизацией процессов с помощью искусственного интеллекта.
🎁 Всем участникам, прошедшим интенсив, подарим электронную книгу Роджера Сайпа и Робба Збиерски «Разум под контролем» издательства МИФ. А каждый, кто оставит заявку на участие в интенсиве, получит материал с подборкой коротких и полезных программ на Python.
Подключайтесь, задавайте вопросы и получите сертификат на скидку 10 000 рублей на любой курс Skillbox.
Ждём вас в прямых эфирах с 15 по 17 мая в 19:00 по московскому времени!
Вы научитесь:
📍 Получать данные с сайтов, которые помогают аналитикам и владельцам бизнеса изучать рынок, конкурентов и динамику цен.
📍 Работать с API — специальными программными инструкциями, с помощью которых можно получить данные с сайтов.
📍 Парсить HTML. Узнаете, как автоматизировать сбор информации прямо из HTML-кода сайта.
📍 Автоматически выделять важное из огромных массивов данных с помощью Python.
📍 Писать программы для автоматической отправки важных писем по расписанию, тем самым автоматизировать email-рассылки.
📍 Разбираться в рынке фриланса на Python.
Спикером выступит руководитель направления по исследованию данных в Сбере Анастасия Борнева. Она с 2018 года занимается автоматизацией процессов с помощью искусственного интеллекта.
🎁 Всем участникам, прошедшим интенсив, подарим электронную книгу Роджера Сайпа и Робба Збиерски «Разум под контролем» издательства МИФ. А каждый, кто оставит заявку на участие в интенсиве, получит материал с подборкой коротких и полезных программ на Python.
Подключайтесь, задавайте вопросы и получите сертификат на скидку 10 000 рублей на любой курс Skillbox.
Ждём вас в прямых эфирах с 15 по 17 мая в 19:00 по московскому времени!
Методы: classmethod (ч.1)
Обращение к атрибуту несколько раз каждый раз создает объект метода! Поэтому o1.method is o1.method никогда не бывает правдивым. Доступ к функциям как атрибутам класса (в отличие от экземпляра), однако, не создает методы; так SomeClass.method is SomeClass.method и есть на самом деле.
Обращение к атрибуту несколько раз каждый раз создает объект метода! Поэтому o1.method is o1.method никогда не бывает правдивым. Доступ к функциям как атрибутам класса (в отличие от экземпляра), однако, не создает методы; так SomeClass.method is SomeClass.method и есть на самом деле.
Методы: classm (ч.2)
Объект метода сравнивается равным, когда обе функции равны, а связанные объекты одинаковы. Так o1.method == o1.method это правдиво, хотя и не тот же объект в памяти.
staticmethod преобразует функции в дескриптор "no-op", который возвращает функцию как есть. Объекты метода никогда не создаются, поэтому сравнение с is является правдивым.
Объект метода сравнивается равным, когда обе функции равны, а связанные объекты одинаковы. Так o1.method == o1.method это правдиво, хотя и не тот же объект в памяти.
staticmethod преобразует функции в дескриптор "no-op", который возвращает функцию как есть. Объекты метода никогда не создаются, поэтому сравнение с is является правдивым.
involta - международная IT - компания, которая выпустила свой бренд одежды и аксессуаров специально для тебя!
Разрабатывая принты, ребята уделяли внимание деталям. Качество, стиль, упаковка, все доведено до высокого уровня. Продукты бренда involta будут радовать тебя каждый день!
Вот тебе твои любимые принты, заходи в магазин и выбирай товары уже сейчас: https://www.wildberries.ru/brands/involta
Разрабатывая принты, ребята уделяли внимание деталям. Качество, стиль, упаковка, все доведено до высокого уровня. Продукты бренда involta будут радовать тебя каждый день!
Вот тебе твои любимые принты, заходи в магазин и выбирай товары уже сейчас: https://www.wildberries.ru/brands/involta
Методы: staticm
Необходимость создавать новые объекты "метода" каждый раз, когда Python вызывает методы экземпляра, и необходимость каждый раз изменять аргументы для вставки self сильно повлияла на производительность. CPython 3.7 решил это, введя новые коды операций, которые имеют дело с вызывающими методами без создания объектов временных методов. Это используется только тогда, когда фактически вызывается доступная функция, поэтому фрагменты здесь не затрагиваются и по-прежнему генерируют методы :)
Необходимость создавать новые объекты "метода" каждый раз, когда Python вызывает методы экземпляра, и необходимость каждый раз изменять аргументы для вставки self сильно повлияла на производительность. CPython 3.7 решил это, введя новые коды операций, которые имеют дело с вызывающими методами без создания объектов временных методов. Это используется только тогда, когда фактически вызывается доступная функция, поэтому фрагменты здесь не затрагиваются и по-прежнему генерируют методы :)
Абсолютная правда
Реализация all функции эквивалентна.
all([]) возвращает True, поскольку итерируемый элемент пуст.
all([[]]) возвращает, False потому что переданный массив содержит один элемент, [] а в python пустой список является ложным.
all([[[]]]) и более высокие рекурсивные варианты всегда есть True. Это потому, что единственный элемент переданного массива ([[...]]) больше не является пустым, а списки со значениями соответствуют действительности.
Реализация all функции эквивалентна.
all([]) возвращает True, поскольку итерируемый элемент пуст.
all([[]]) возвращает, False потому что переданный массив содержит один элемент, [] а в python пустой список является ложным.
all([[[]]]) и более высокие рекурсивные варианты всегда есть True. Это потому, что единственный элемент переданного массива ([[...]]) больше не является пустым, а списки со значениями соответствуют действительности.
Удивительная запятая
Запятая в конце не всегда допустима в списке формальных параметров функции Python.
В Python список аргументов определяется частично с помощью начальных и частично завершающих запятых. Этот конфликт приводит к ситуациям, когда запятая оказывается запертой посередине, и ни одно правило ее не принимает.
Примечание: Проблема с запятыми в конце исправлена в Python 3.6. Замечания в этом посте кратко обсуждают различные варианты использования запятых в конце в Python.
Запятая в конце не всегда допустима в списке формальных параметров функции Python.
В Python список аргументов определяется частично с помощью начальных и частично завершающих запятых. Этот конфликт приводит к ситуациям, когда запятая оказывается запертой посередине, и ни одно правило ее не принимает.
Примечание: Проблема с запятыми в конце исправлена в Python 3.6. Замечания в этом посте кратко обсуждают различные варианты использования запятых в конце в Python.
Хотите изменить жизнь и приобрести новую высокооплачиваемую профессию?
Специально для вас мы разработали бесплатный курс, посвящённый IT-специальностям.
Вы узнаете:
– чем занимаются фронтэнд-разработчики;
– кто обеспечивает безопасность данных и приложений;
– зачем проводить ручное и автоматические тестирование ПО;
– как создаются мобильные приложения для iOS и Android;
– кто такой дата-сайентист и как им стать, где применяются алгоритмы машинного обучения и чем они полезны в бизнесе — и это ещё не всё!
Вы сможете попробовать себя в самых популярных профессиях, выполнив задания к каждому из восьми модулей. А в конце программы вы пройдёте небольшой тест на профориентацию. По его результатам мы подберём для вас наиболее подходящее направление и подскажем, какая профессия станет идеальным стартом для вашей IT-карьеры.
Майские скидки до 60% по промокоду «Python School» по ссылке https://epic.st/epcvpM
Специально для вас мы разработали бесплатный курс, посвящённый IT-специальностям.
Вы узнаете:
– чем занимаются фронтэнд-разработчики;
– кто обеспечивает безопасность данных и приложений;
– зачем проводить ручное и автоматические тестирование ПО;
– как создаются мобильные приложения для iOS и Android;
– кто такой дата-сайентист и как им стать, где применяются алгоритмы машинного обучения и чем они полезны в бизнесе — и это ещё не всё!
Вы сможете попробовать себя в самых популярных профессиях, выполнив задания к каждому из восьми модулей. А в конце программы вы пройдёте небольшой тест на профориентацию. По его результатам мы подберём для вас наиболее подходящее направление и подскажем, какая профессия станет идеальным стартом для вашей IT-карьеры.
Майские скидки до 60% по промокоду «Python School» по ссылке https://epic.st/epcvpM
Строки и обратная косая черта (ч.2)
В необработанном строковом литерале (на что указывает префикс r) обратная косая черта передается как есть вместе с поведением экранирования следующего символа.
Это означает, что когда анализатор обнаруживает обратную косую черту в необработанной строке, он ожидает, что за ней последует другой символ. И в нашем случае (print(r"\")) обратная косая черта экранировала завершающую кавычку, оставляя анализатор без завершающей кавычки (отсюда SyntaxError). Вот почему обратная косая черта не работает в конце необработанной строки.
В необработанном строковом литерале (на что указывает префикс r) обратная косая черта передается как есть вместе с поведением экранирования следующего символа.
Это означает, что когда анализатор обнаруживает обратную косую черту в необработанной строке, он ожидает, что за ней последует другой символ. И в нашем случае (print(r"\")) обратная косая черта экранировала завершающую кавычку, оставляя анализатор без завершающей кавычки (отсюда SyntaxError). Вот почему обратная косая черта не работает в конце необработанной строки.