temsorflow
вместо tensorflow
, requyests
вместо requests
, asyincio
вместо asyncio
и т.п. При проведении подобных атак злоумышленники рассчитывают на невнимательных пользователей, совершивших опечатку или не заметивших отличий в названии при поиске или переходе по ссылке из форумов и чатов, в которых злоумышленники оставляют обманные инструкции.Будьте аккуратнее, когда качаете что-то через
pip
)@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Zen of Python
Бенчмарк Wi-Fi сетей на wifi-heat-mapper
wifi-heat-mapper — питонская версия Wi-Fi Analyzer, позволяющая не только визуализировать силу сигнала, но и рассчитывать мощность в любой точке помещения
#библиотека
@zen_of_python
wifi-heat-mapper — питонская версия Wi-Fi Analyzer, позволяющая не только визуализировать силу сигнала, но и рассчитывать мощность в любой точке помещения
#библиотека
@zen_of_python
files.pypihosted[.]org
) походил на легитимное зеркало files.pythonhosted.org.@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
requests
:import requests
response = requests.get('https://api.example.com/end-point')
data = response.json()
Замените
'https://api.example.com/end-point'
на необходимый API endpoint. Прежде чем приступить к обработке данных, проверьте, был ли запрос успешным.requests.get()
используя словарь, чтобы избежать конкатенации строк:params = {'origin': 'Нарния', 'destination': 'Хогвартс', 'waypoints': 'Средиземье|Мордор', 'sensor': 'false'}
response = requests.get('https://maps.googleapis.com/maps/api/directions/json', params=params)
Важно: значение
waypoints
должно быть указано в виде одной строки, например, 'Средиземье|Мордор'.После получения ответа, преобразуйте JSON с помощью метода
.json()
и проверьте код ответа:data = response.json()
if response.status_code == 200:
from pprint import pprint
pprint(data) # Выведем данные структурированно для удобства
else:
print("Ошибка HTTP-запроса:", response.status_code)
Обработка вложенных структур в JSON требует внимательного подхода. На Python это выполнимо:
for route in data['routes']:
for leg in route['legs']:
for step in leg['steps']:
print(step['html_instructions'])
Используйте циклы для перемещения по структуре данных.
— Всегда проверяйте статус ответа.
— Применяйте метод
.json()
, а при необходимости — json.loads(response.content)
.— Не ограничивайтесь в использовании параметров запроса: чем больше их, тем лучше.
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️ MindGraph
Демонстрационный прототип концепции для создания и обработки запросов к постоянно расширяющемуся графу знаний с помощью искусственного интеллекта.
▪ Github
Демонстрационный прототип концепции для создания и обработки запросов к постоянно расширяющемуся графу знаний с помощью искусственного интеллекта.
▪ Github
После того, как вы всё настроете по примеру из статьи останется только нажать F1, и в появившейся строке ввода ввести "Open folder in container". После этого выбрать корневую папку проекта. После чего запустится сборка контейнера и папка откроется внутри контейнера.
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
Вышла Django 5.0 🔥
Что добавили/обновили/исправили?
• В предыдущих версиях мы использовали nulls_last=False. Теперь nulls_first и nulls_last могут быть True или None. Поэтому теперь в некоторых местах вместо значения по умолчанию находится nulls_last = None
• В сигналах появился новый тип асинхронных ресиверов async_receivers. Его добавили в класс SignalBlocker, теперь он временно отключает сигнал.
• Если после refresh_from_db надо дальше по коду использовать закешированные значения из базы данных, появился такой хак:
https://docs.djangoproject.com/en/5.0/releases/5.0/
@pythonl
Что добавили/обновили/исправили?
• В предыдущих версиях мы использовали nulls_last=False. Теперь nulls_first и nulls_last могут быть True или None. Поэтому теперь в некоторых местах вместо значения по умолчанию находится nulls_last = None
- nulls_last = False
+ nulls_last = None
if ordering_by == OrderingField.FIELD_START_AT:
nulls_last = True
• В сигналах появился новый тип асинхронных ресиверов async_receivers. Его добавили в класс SignalBlocker, теперь он временно отключает сигнал.
• Если после refresh_from_db надо дальше по коду использовать закешированные значения из базы данных, появился такой хак:
my_model_obj._meta.private_fields = []
my_model_obj.refresh_from_db()
https://docs.djangoproject.com/en/5.0/releases/5.0/
@pythonl
В конце статьи есть все исходники запросов, чтобы вы смогли взять их за основу при написании собственной программы.
• Создание проекта
• Быстрый запуск API
• Добавление сервисного аккаунта в Google Analytics 4
• Загрузка приватного ключа на Google Диск
• Подготовка программы
• Выгрузка данных по отчетам
— Источники трафика (User acquisition)
— Привлечение трафика (Traffic acquisition)
— События (Evemts)
— Конверсии (Conversions)
— Страницы и экраны (Pages and screens)
— Целевая страница (Landing Page)
— Совершённые покупки (Ecommerce purchases)
— Демографические данные (Demographic details)
— Технические данные (Tech details)
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Относительно недавно состоялся релиз Nuitka 2.0. Это проект компилятора для трансляции скриптов на языке Python в представление на языке C, которое затем можно скомпилировать в исполняемый файл, использующий libpython для обеспечения максимальной совместимости с CPython.
В программном решении используются штатные средства CPython для управления объектами.
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM
При смешивании типов возможно неочевидное поведение, можете проверить:
>>> x = (1 << 53) + 1
>>> x + 1.0 < x
True
x
к другому типу была потеряна точность, а в другой части — нет.Значение переменной
x
конвертируется в тип float
.При этом
x
непредставим точно в виде float
, поэтому выбирается ближайшее (меньшее здесь) представимое число: x
—> float(x-1)
. Поэтому сумма получается неточной, вся цепочка выглядит так:x+1.0 -> float(x-1)+1.0 -> (x) -> float(x-1)
Сравнение
float
< int
происходит точно. Значение x
(int
) математически больше x+1.0
(float
).Как-то так.
@pythonl
Please open Telegram to view this post
VIEW IN TELEGRAM