Ответы пользователя по тегу Python
  • Как вносить правки в dist-packages в Питоне?

    iximiuz
    @iximiuz
    Вам точно нужно исправить системный модуль? Может быть лучше создать virtual environment, установить в него все требуемые зависимости (или на крайний случай разрешить использовать системные, а установить только этот модуль) и пропатчить его? А после этого использовать python из виртуального окружения в своем проекте.

    P.S. pull request на GitHub (если возможно) сделайте в любом случае.
    Ответ написан
    2 комментария
  • С чего начать написание парсера?

    iximiuz
    @iximiuz
    Отличная и мощнейшая библиотека для парсинга сайтов на Python - это scrapy.

    В то же время, есть два "интересных" проекта - zenrus.ru и ruszen.ru. И где-то я видел статью, что как минимум одному из них, сделанному на коленке, было очень трудно справляться с неожиданно выросшей нагрузкой. Я бы порекомендовал вам использовать какой-либо бродкастинг для оповещения всех подключенных клиентов об изменении курса - что-то вроде websocket.
    Ответ написан
    Комментировать
  • Как обмениваться данными между скриптами (Python)?

    iximiuz
    @iximiuz
    То, что вы ищете, называется IPC. В частности для Python можно посмотреть здесь.

    Для того, чтобы обеспечить взаимодействие нескольких независимых скриптов, можно воспользоваться следующим подходом: открываете pipe в обоих процессах. Первый скрипт выполнил действие - сделал запись в канал и начинает блокирующее чтение из канала. Второй скрипт получил сообщение из канала - выполнил действие, сделал запись в канал, разблокировав первый скрипт. Сам же снова подвис на чтении из канала. И так далее. Вместо pipe можно использовать socket, shared memory и пр. Как правильно было подмечено товарищем bobrovskyserg, в общем случае IPC - это про взаимодействие разнородных процессов, они не обязательно должны все (или хотя бы один) быть написаны на Python.
    Ответ написан
    7 комментариев
  • Как определить наименьшее уникальное значение в словаре?

    iximiuz
    @iximiuz
    Необходимо стараться написать общий алгоритм решения задачи, а не перебрать допустимые варианты. Это можно делать даже без использования конкретного языка программирования, пользуясь лишь логическими утверждениями. Например: для начала подсчитаем количество вхождений каждого из значений в словаре (см. counter в коде). Затем выберем наименьшее уникальное значение. Для этого необходимо отфильтровать массив уникальных, затем отсортировать его по возрастанию и взять первый элемент (см. lowest_unique = (sorted([k for k in counter if counter[k] == 1]) or [None])[0]). Теперь необходимо найти ключ в начальном словаре, соответствующий найденному минимальному значению. Можно, конечно, перебрать все ключи в словаре и проверить их значения, но это долго. Если же сделать отражение начального словаря (переворот, flip), то заданное значение ключа можно будет найти простейшим обращением flipped_dict[lowest_unique]. Делаем переворот: flipped_dict = dict(zip(initial_dict.values(), initial_dict.keys())).

    Полная версия кода:
    initial_dict = {'Foo': 23, 'Bar': 26, 'Baz': 45, 'Bang': 23}
    flipped_dict = dict(zip(initial_dict.values(), initial_dict.keys()))  
    # print(flipped_dict)
    # {26: 'Bar', 45: 'Baz', 23: 'Foo'}
    
    counter = {}
    for k in initial_dict:
    	val = initial_dict[k]
    	counter[val] = counter.get(val, 0) + 1
     # print(counter)  
     # {26: 1, 45: 1, 23: 2}
    
    lowest_unique = (sorted([k for k in counter if counter[k] == 1]) or [None])[0]
    if lowest_unique is None:
    	print("Not found!")
    else:
    	print("Found [%s]->[%s]" % (flipped_dict[lowest_unique], lowest_unique))
    Ответ написан
  • Как оптимизировать код на Python (поиск в строке)?

    iximiuz
    @iximiuz
    Если количество уникальных word не слишком велико, то можно сделать "index" по ним. Тогда последующий поиск такой же подстроки будет происходить за O(1), а не за O(n) как это происходит с оператором in. Минус - оверхед по памяти на индекс.

    def in_checker(word, s):
        if not hasattr(in_checker, '_index'):
            in_checker._index = {}
        if word not in in_checker._index:
            in_checker._index[word] = word in s
        return in_checker._index[word]
    
    in_checker('abc', 'tttrrrabcwww');  # O(n)
    in_checker('abc', 'tttrrrabcwww');  # O(1)
    Ответ написан
    4 комментария
  • Какой язык программирования выбрать?

    iximiuz
    @iximiuz
    Python или JS. А PHP ни в коем случае, как стартовый язык. Он дает слишком искаженное понимание бекграунда веб-разработки из-за особенностей работы интерпретатора (изолирование окружение скрипта, reset интерпретатора между запросами). При этом Python, JS, Ruby и скорее всего Java, хотя на последней у меня нет опыта, в плане веб-разработки выглядят очень похожими. Общие принципы построения и запуска приложений, многопоточность, асинхронность (как возможность). В PHP ничего этого нет, там все выглядит куда более линейным и упрощенным. Пересесть с Python или Ruby на PHP (при необходимости!) будет элементарной задачей, а вот обратное - не верно, слишком много новых концепций нужно будет освоить.

    И никаких фреймворков в начале обучения! Программист на Django звучит также ужасно, как программист на jQuery. Это как клеймо. Программист - это прежде всего понимание общих принципов разработки, а уже потом языки, фреймворки и пр. Так что прежде всего необходимо разобраться с wsgi. Написать пару своих скриптов, обрабатывающих запросы. Проверить, как работает эта кухня. Потом можно начать использовать flask.

    P.S. Доп. плюсы Python, JS и пр. - область их использования не ограничена вебом. Возможно в будущем вы будете этому рады, когда решите вместо сайтов программировать боевых роботов или попробовать себя в машинном обучении или еще где-нибудь.
    Ответ написан
    4 комментария