Ответы пользователя по тегу Python
  • Как добавить задачу в очередь к существующему паралельному потоку в Python 3?

    Необходимо:
    1) создавать поток только один раз, в начале работы программы
    2) использовать Queue для общения с ним: https://docs.python.org/2/library/queue.html

    Альтернатива, чтобы было гораздо проще - можно использовать Celery: celeryproject.org
    Ответ написан
    2 комментария
  • Python Какая принципиальная разница в записи условия?

    Позволю себе добавить к словам других комментаторов: обычно лучше не делать "громадные условия", их трудно читать. Почти всегда можно как-нибудь оптимизировать и сократить, например, разложив его на отдельные переменные, или составляя список и натравливая на него any() / all(), или вынося это всё в отдельную функцию с кучей assert, вместо условия ловя AssertionError.
    Ответ написан
    Комментировать
  • Использовать Python или искать более подходящий инструмент?

    Исходя из вопроса и из рассмотрения обилия библиотек как недостатка - вряд ли проблема в языке программирования. :) Python вполне хорош для всяческих скриптов и обработки данных. Я думаю, что о Scala надо думать, когда система, которую вы хотите сделать, становится настолько огромной и сложной, что без повсеместных internal DSL, систем типов и теории категорий вам с ней не выжить. Так что попробуйте всё же разобраться как следует.
    Ответ написан
    Комментировать
  • Использовать ли Python, когда можно обойтись bash?

    Может быть, можно посмотреть на другие шеллы? Доходили смутные слухи, что разнообразные zsh и csh более логичны, чем bash.
    Ответ написан
  • Как реализовать таймер и интервал в Python3?

    Если поток один, то:

    import time
    
    while True:
        time.sleep(1) # in seconds
        action()
    Ответ написан
    2 комментария
  • ..............................?

    Мне, признаться, ничего не понятно, но почему вы пишете "псевдокод"? Синтаксис arr[0][1] - не псевдокод, он совершенно корректен. Он не решает задачу?

    Кроме того непонятно, как вы хотите транспонировать матрицу не применяя циклы? такой функции у родных списков Python нет. Есть такие функции у массивов в numpy.
    Ответ написан
    Комментировать
  • Почему код не работает?

    • Строковые переменные не в кавычках
    • Не надо сравнивать result с bool2, ведь вы только что туда записали значение. Достаточно только одного оператора if. Попробуйте :)
    Ответ написан
    5 комментариев
  • Python3: Почему юнит-тест не работает?

    Попробуйте положить файл с тестируемыми функциями и файл с тестом в одну папку. Вы импортируете из модуля funcs_to_test, но как Python его найдёт?
    Ответ написан
  • Как организовать построчное чтение из файла с последующим удалением строки в Python?

    Не могу даже сказать, возможно ли это каким-либо извращением сделать, поскольку никогда не пытался. Такой подход в любом случае является плохим тоном. Нужно читать из одного файла, обрабатывать, и писать результат в другой файл.
    Ответ написан
    1 комментарий
  • Как вывести в файл результата переменной python?

    Самое простое -

    print("hey!")

    и потом вызвать ваш скрипт как

    python myscript.py > ~/myscript.log

    Для отладки, я думаю, это то что нужно. Если же вам нужны разные сообщения, уровни их, регулярный мониторинг логов - то действительно лучше logging.
    Ответ написан
    Комментировать
  • Можно ли реализовать запись в словарь по адресу в строковом формате в Python 3?

    У вас есть контроль над форматом строки адреса? Например, сделать её так:

    data.0.format

    Было бы проще. Теперь по поводу самого парсинга. Вы можете написать две функции.

    def parse_path(address):
        # парсим адрес address и возвращаем список его фрагментов.
        # пример: "['data'][0]['format']" -> ['data', 0, 'format']
        # Думаю, что регулярные выражения вкупе с небольшой обвязкой могут помочь.
        return path
    
    def recursive_set(datastructure, path, value):
        head, tail = path[0], path[1:]
        if tail:
            # есть ещё что делать дальше.
            return recursive_set(datastructure[head], tail, value)
        else:
            # Дальше ползти некуда, завершаем рекурсию.
            datastructure[head] = value
    
    recursive_set(
        {'data': ...},
        parse_address("['data'][0]['format']"),
        'doc'
    )
    Ответ написан
    1 комментарий
  • Хочу работать программистом Python бесплатно. Это возможно?

    Это не будет бесплатно. Платой будет указание на ваши ошибки. Можете мне написать на почту или в skype, они в профиле, побеседуем.
    Ответ написан
    1 комментарий
  • Суперкласс Object можно привязать к БД или нет?

    1. Что вы понимаете под "привязать к БД"? Какой ORM используется?
    2. Что значит "подкласс суперкласса"? Масло масляное.
    3. Почему вы называете БД типом данных?
    4. Как вы понимаете привязку класса к типу данных?


    Объясните, пожалуйста, суть вопроса человеческим языком, а не посредством неправильно употребляемых терминов.
    Ответ написан
    7 комментариев
  • Пути создания виртуального тренажера?

    Не вполне понятно, какой процесс вы намереваетесь моделировать: можно ли его считать дискретным, или есть непрерывные составляющие; какая требуется визуализация; почему вы упоминаете дифференциальные уравнения; насколько высока вычислительная сложность.

    Я бы сказал, что существуют следующие методы решения задачи.

    Настольное приложение на Python. Python для сколь-нибудь сложных систем более удобный язык, чем JavaScript, потому что вы можете легко разложить вашу симуляцию на классы, описать взаимоотношения между ними. Есть много структур данных: списки, очереди, словари, что угодно, - не надо делать свой класс prioritized queue, например. Есть всяческие оптимизированные инструменты вроде numpy, scipy.

    Есть фреймворки для разработки приложений: pygame и более новый kivy. О kivy я ничего сказать не могу. О pygame могу сказать, что её API мог бы хорошо смотреться двадцать лет назад, но не сегодня. Python гибкий язык, на нём можно писать гораздо более человекопонятные библиотеки.

    Кроме того, на pygame без дополнительных библиотек вам придётся руками, из прямоугольников и окружностей, рисовать графики, схемы, etc, - то есть вы много времени потратите на вспомогательные вещи вместо того чтоб разрабатывать вашу симуляцию. Возможно, библиотеки для этих вещей существуют, но я мало знаком с разработкой настольных приложений на Python, не могу сказать.

    Наконец, чтобы распространять ваше приложение, потребуется сделать установщик, собрать его в .exe специальным инструментом, обновлять его как-то. Всё это довольно муторно и вселяет тоску.

    Клиентское приложение на JS, как писали уважаемые участники обсуждения выше, лишено многих из этих недостатков. У пользователей будет доступ к вашей программе отовсюду, не нужно ничего устанавливать на компьютер. К вашим услугам Canvas, SVG и при необходимости WebGL. И море, нет, - океан разнообразных JS-библиотек, которые позволяют быстро и удобно делать графику, диаграммы, анимацию, визуализации любого сорта.

    Недостатки, с которыми встречался я, когда занимался чем-то подобным:

    • Отсутствие удобных структур данных. В JavaScript есть корявые списки, с которыми работать неудобно. Но я думаю, что сейчас этот недостаток нивелируется развитием самого языка и появлением библиотек типа underscore.js.
    • Неудобство и лапшевидность получающегося кода в результате отсутствия нормального наследования. Ну тут снова: библиотек для того же наследования существует множество; есть requirejs и модули; ну и вообще, сейчас я бы сделал это всё иначе :)
    • Медленность вычислений. Весьма относительная вещь, потому что программу можно при желании сильно оптимизировать; для большинства таких симуляций, о которых речь шла у меня, производительность проблемой не была.
    Гибридный вариант. Веб-приложение, на бэк-енде работает процесс, выполняющий расчёты; на фронт-енде работает клиентский код, который общается с пользователем и визуализирует результаты. Для больших симуляций - очевидно лучший вариант, но и самый сложный. И клиент и сервер имеют каждый свою объектную модель, и в некотором смысле одно и то же, получается, нужно дважды реализовывать.

    Поэтому, как итог - я бы предложил вам остановиться на варианте 2 (клиентский код на JS), а со временем, если симуляция окажется ну очень сложной - можно перейти к варианту 3, опираясь на накопленный опыт. Частично вынести из уже написанного приложения часть расчётов на сервер. Как пример: отдельный процесс по заданным параметрам с визуализацией вы считаете на клиенте, а если нужно посчитать сто процессов и найти какие-то усреднённые характеристики - это выносится на сервер. Просто и логично.

    Если интересно - пишите на почту, можно пообщаться. Я ни в коем случае не являюсь специалистом, но пока учился в вузе - немного интересовался темой, читал книги/статьи и писал простенькие программы по дискретно-событийному моделированию экономических процессов в качестве курсового проекта.
    Ответ написан
    1 комментарий
  • Почему в Python нельзя вывести значение глобальной переменной в функции перед ее затенением?

    Срабатывает, если перед print вписать:

    global a

    В моей практике ни разу не потребовалось делать подобное.
    Ответ написан
    Комментировать
  • Как при выгрузке определить ограничение по словарю?

    Код не идиоматичный. Непонятно, что делает вот это. full_house_list - это список слов или текстов?

    for house in house_list:
      full_house_list.remove(house)


    1. Я бы предположил, что вам надо входные тексты разбивать на слова прежде всего и затем находить пересечения множества разрешённых слов и множества запрещённых слов с текстом, соответственно. Но тогда оба множества должны все словоформы заключать в себе.
    2. Ну а вообще, в более продвинутой форме, вам понадобится движок для стемминга.
    Ответ написан
    Комментировать
  • Как получить множеством дни месяцев текущего года?

    import calendar
    
    year = 2015
    print [
        list(range(1, calendar.monthrange(year, month)[1] + 1))
        for month in range(1, 13)
    ]

    https://docs.python.org/2/library/calendar.html#ca...
    Ответ написан
    Комментировать
  • Поиск наставника, рально ли?

    Пишите. Почта в профиле. Занимаюсь разработкой на Python/Django около трёх лет. Не могу обещать, что чему-то вас научу, но почему бы не пообщаться.
    Ответ написан
    Комментировать
  • Как повысить эффективность кода? Или такое поведение программы считается нормальным?

    Собрались тут элитарии и гопники, и те и другие набросились на человека... Фиг он ещё чего спрашивать будет. А он же старался, писал чего-то. Что - само по себе - похвально. Рефакторинг полезен, чтоб перейти от плохой программы к хорошей программе и по ходу дела понять, чем хорошая программа лучше плохой.

    Для начала.

    - Русские названия переменных не годятся. Русские слова, написанные транслитом, как названия не годятся тоже. Только английские слова.
    - Если вас заботит скорость, - зачем вы делаете сначала random.choice, а потом сравниваете результат (строку) с другой строкой? Используйте random.randint(0, 1), который выдаст вам одно из двух чисел; если нуль - орёл, единица - решка.
    Ответ написан
    4 комментария