Python Hub - сборище Питонистов
1.71K subscribers
657 photos
1 video
37 files
276 links
Уголок счастья для любого питониста.

Сотрудничество или заказы: @leshunist

https://shcoder.dev - студия разработки ShcoderDevelopment

https://t.me/pythonhub_chat - чат
Download Telegram
🧠 Python и психология: анализ поведения пользователей в приложениях [часть 2]🧠

Перейдем ко второй части

➡️ Примеры применения Python в анализе поведения пользователей

➡️ 1. A/B-тестирование
Python используется для проведения A/B-тестов, чтобы сравнить эффективность разных версий интерфейса. Например, вы можете протестировать два варианта кнопки "Купить" и выбрать тот, который приводит к большему количеству конверсий.

➡️ 2. Рекомендательные системы
Машинное обучение на Python помогает создавать персонализированные рекомендации для пользователей. Например, платформы потокового видео могут предлагать контент на основе предыдущих просмотров.

➡️ 3. Тепловые карты
Python может использоваться для создания тепловых карт, показывающих, куда чаще всего кликают пользователи на сайте или приложении. Это помогает оптимизировать расположение элементов интерфейса.

➡️ 4. Прогнозирование оттока пользователей
Используя алгоритмы машинного обучения, можно прогнозировать, какие пользователи склонны покинуть приложение, и предложить им специальные бонусы для сохранения лояльности.

➡️ Как Python помогает улучшить UX/UI?

1. Выявление проблем: Анализ данных помогает найти места, где пользователи сталкиваются с трудностями, например, слишком длинные формы или неочевидные кнопки.
2. Персонализация: Python позволяет создавать адаптивные интерфейсы, меняющиеся в зависимости от предпочтений пользователя.
3. Оптимизация навигации: Исследование маршрутов пользователей помогает упростить навигацию и сделать её более интуитивной.
4. Тестирование гипотез: Python позволяет быстро проверять новые идеи и экспериментировать с интерфейсом без больших затрат.

🌈 Заключение

Python становится всё более важным инструментом для анализа поведения пользователей и улучшения UX/UI.

🌟 Если вы хотите улучшить свой продукт, начните использовать Python для анализа данных о поведении пользователей!
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍1
📝 Создание собственного DSL (Domain-Specific Language) на Python [ЧАСТЬ 1]🧙‍♂️

DSL (Domain-Specific Language) — это специализированный язык программирования, созданный для решения узкоспециализированных задач. В отличие от общих языков программирования, таких как Python или JavaScript, DSL ориентирован на конкретную область применения: например, анализ данных, конфигурирование систем или управление бизнес-процессами.

Python идеально подходит для создания DSL благодаря своей гибкости и мощным возможностям метапрограммирования.

➡️ Зачем нужен DSL?

1. Упрощение задач: DSL позволяет описать сложные проблемы простым и понятным образом.
2. Доступность для неспециалистов: Специализированные языки могут быть более доступными для людей, не имеющих опыта в программировании.
3. Более читаемый код: DSL часто использует синтаксис, который ближе к предметной области, что делает код более понятным.

Примеры использования DSL:
- SQL для работы с базами данных.
- HTML/CSS для создания веб-страниц.
- Ansible для автоматизации администрирования.

➡️ Как создать DSL на Python?

Существует несколько подходов к созданию DSL на Python:

➡️1. Использование встроенных возможностей Python

Вы можете использовать синтаксис Python для создания DSL, добавляя специализированные функции и классы. Этот подход называется "внутренним DSL" (Internal DSL).

Пример: Создание DSL для управления роботом

class Robot:
def move(self, distance):
print(f"Moving {distance} meters")

def turn(self, angle):
print(f"Turning {angle} degrees")

def robot_script():
robot = Robot()
robot.move(10)
robot.turn(90)
robot.move(5)

robot_script()


В этом примере мы создали простой DSL для управления роботом. Хотя это всё ещё Python, его синтаксис адаптирован под задачу.


➡️ 2. Парсинг текста (External DSL)

Если вы хотите создать полностью самостоятельный язык, вам нужно реализовать парсер для обработки пользовательского синтаксиса. Этот подход называется "внешним DSL" (External DSL).

Шаги для создания External DSL:
1. Определите синтаксис вашего языка.
2. Напишите парсер для преобразования текста в структуры данных Python.
3. Реализуйте интерпретатор для выполнения этих структур.

Пример: Создание DSL для управления светофором

Предположим, мы хотим создать DSL для управления светофором. Его синтаксис может выглядеть так:

light red for 30 seconds
light green for 60 seconds
light yellow for 5 seconds


➡️ Реализация парсера:

import re

class TrafficLight:
def __init__(self):
self.state = None

def set_light(self, color, duration):
print(f"Setting light to {color} for {duration} seconds")
self.state = color

def parse_script(script):
traffic_light = TrafficLight()
pattern = r"light (\w+) for (\d+) seconds"

for line in script.splitlines():
match = re.match(pattern, line)
if match:
color, duration = match.groups()
traffic_light.set_light(color, int(duration))

# Текст DSL
script = """
light red for 30 seconds
light green for 60 seconds
light yellow for 5 seconds
"""

parse_script(script)

Результат:

Setting light to red for 30 seconds
Setting light to green for 60 seconds
Setting light to yellow for 5 seconds

😮😮😮 ЖДЕМ ЧАСТЬ 2 😮😮😮
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21
📝 Создание собственного DSL (Domain-Specific Language) на Python [ЧАСТЬ 2] 🧙‍♂️

🔎 3. Использование инструментов для создания DSL

Если вы хотите ускорить процесс создания DSL, можно использовать специализированные инструменты, такие как:
- PLY (Python Lex-Yacc): Библиотека для создания лексеров и парсеров.
- Lark: Современный парсер с простым синтаксисом.
- ANTLR: Мощный инструмент для создания DSL, поддерживающий множество языков.

Пример с Lark:

from lark import Lark, Transformer

# Грамматика DSL
grammar = """
start: command+
command: "light" COLOR "for" NUMBER "seconds"
COLOR: "red" | "green" | "yellow"
NUMBER: /\d+/
%import common.WS
%ignore WS
"""

# Парсер
parser = Lark(grammar, start="start", parser="lalr", transformer=Transformer())

class TrafficLightTransformer(Transformer):
def command(self, items):
color, duration = items
print(f"Setting light to {color} for {duration} seconds")
return {"color": color, "duration": duration}

def COLOR(self, token):
return str(token)

def NUMBER(self, token):
return int(token)

# Текст DSL
script = """
light red for 30 seconds
light green for 60 seconds
"""

# Парсинг и выполнение
parsed = parser.parse(script)



➡️ Примеры реальных DSL на Python

1. Django ORM: Язык запросов для работы с базами данных.
2. Pandas Query API: DSL для фильтрации и анализа данных.
3. Ansible Playbooks: DSL для автоматизации серверных задач.
4. SQLAlchemy: DSL для работы с базами данных на уровне Python.


🌈 Заключение

Создание DSL на Python — это мощный инструмент для решения узкоспециализированных задач. Вы можете выбрать между внутренними и внешними DSL в зависимости от ваших потребностей. Если вам нужна простота реализации, используйте Internal DSL, а если требуется полная свобода в создании синтаксиса, выбирайте External DSL.

🌟 Попробуйте создать свой DSL прямо сейчас и сделайте работу над вашими проектами проще!
Please open Telegram to view this post
VIEW IN TELEGRAM
2
‼️‼️ Думаю, что это будет полезно каждому в проект

ГПТ без VPN да еще и с бесплатным подключением к Python без ключей через импорт. Ну сказка.


Attention. Звук оповещалки и колокольчика не уменьшен, будет орать в ушах. Простите
😬😬😬

https://youtu.be/fnffEWuA0FQ
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Python Hub - сборище Питонистов
Photo
Разбор😎

Список lst по умолчанию создается один раз при определении функции, а не при каждом вызове.
Поэтому при первом вызове add_to_list(1) список становится [1], а при втором вызове add_to_list(2) к тому же списку добавляется 2, итог — [1, 2].

Это классическая ловушка с изменяемыми аргументами по умолчанию в Python.
👍61🤔1
Что выдаст код выше?
Anonymous Quiz
29%
1 2 3
17%
3 3 3
14%
0 1 2
22%
Ошибка
17%
Не знаю
🤔5👍31
Python Hub - сборище Питонистов
Photo
Разбор😎

Lambda-функции в списке захватывают переменную i из внешней области видимости , а не её значение на момент создания. После завершения цикла i становится равным 2 (последнее значение в range(3)).

Поэтому все функции используют i = 2, и результат для любого вызова funcs[n](1) будет 1 + 2 = 3.

Это типичная "ловушка" при работе с замыканиями в циклах.
👍41
Python Hub - сборище Питонистов
Photo
Разбор 😎

В Python списки — это изменяемые объекты. Когда мы присваиваем y = x, переменная y начинает ссылаться на тот же объект в памяти, что и x.

Поэтому любые изменения, сделанные через y, отразятся и на x. В данном случае вызов y.append(4) добавляет элемент 4 в конец списка, на который ссылаются обе переменные.

Таким образом, вывод будет [1, 2, 3, 4].
👍31
Что выдаст код выше?
Anonymous Quiz
47%
15 15
27%
10 15
10%
AttributeError
10%
10 10
6%
Не знаю
2👍2
Python Hub - сборище Питонистов
Photo
Разбор 😎


Здесь мы имеем дело с объектами и ссылками в Python. Когда создается объект класса A (a = A()), переменная a ссылается на этот объект. Затем переменной b присваивается ссылка на тот же объект (b = a). Это означает, что a и b ссылаются на один и тот же объект в памяти.

Когда вызывается метод update через переменную b, он изменяет атрибут x этого объекта, увеличивая его значение на 5. Поскольку a и b ссылаются на один и тот же объект, изменение видно через обе переменные. Таким образом, после выполнения b.update(5) значение x становится равным 15, и вывод будет 15 15.
👍51