• Как оптимизировать преобразование списка словарей с заменой значений?

    @766dt
    Да тут вроде нет задачи для которой стоило бы даже велосипед писать
    По сути да, просто проходить и заменять, но можно чуть упростить саму форму:
    result = [{k: (v if v is not None else 0) for k, v in d.items()} for d in orders]
    Ответ написан
    9 комментариев
  • Из словаря список списков в Python 3?

    @766dt
    Можно как-то так:
    >>> sorted_keys = sorted(a.keys())
    >>> list(zip(sorted_keys[::2], sorted_keys[1::2]))
    [('1', '2'), ('3', '4')]


    UPD:
    Если хочется решить именно при помощи генераторов:

    >>> sorted_keys = sorted(a.keys())
    >>> [sorted_keys[i:i+2] for i in range(0, len(sorted_keys), 2)]
    [['1', '2'], ['3', '4']]
    Ответ написан
    1 комментарий
  • Стоит ли сейчас учить C# и .NET?

    @766dt
    Мой совет такой - не разбрасываться по языкам, а выучить один до такой степени, когда сам язык становиться не так уж и важен, а новым языком можно начать пользоваться, прочитав пару тонких книжек. Python для этой цели отлично подходит, на мой взгляд.
    Ответ написан
    2 комментария
  • Как уменьшить размер баз MongoDB?

    @766dt
    вроде repairDatabase ужимает коллекции.
    или mongodump & mongorestore
    Ответ написан
    4 комментария
  • Как передавать клиенту минимум файлов, информации?

    @766dt
    Не передавать их.
    Нет ну серьезно, вы хотите и передать картинку/скрипт, чтоб ее вывести/исполнить, и не передать, чтоб пользователь не извлек.
    Вариант который усложнит извлечение - собственный клиент, который будет общаться по шифрованному протоколу. Но всё равно всё извлекается. Браузер в любом случае покажет что передавалось.
    Ответ написан
  • Как выполнить асинхронный запрос к mongo, используя motor, в __init__ методе класса?

    @766dt
    Возникал у меня как-то похожий вопрос.

    Методы вроде __init__ или __new__ вызываются как синхронные __внутри__ питона, поэтому, судя по всему, нет достаточно простой и красивой возможности выполнить их асинхронно. Судя по тому, что появляются специальные магические методы, которые могут содержать асинхронный код, асинхронный код в обычныx методах не предусмотрен изначально.
    Можно выполнить инициализацию без асинхронности, используя что-то вроде asyncio.gather() или BaseEventLoop.run_until_complete(), но это бессмысленно, т.к. заблокирует остальные задачи.

    Я сейчас, в случае необходимости, делаю два метода инициализации, __init__() в котором всё что можно по быстрому выполнить синхронно, и init() который уже асинхронный. Некрасиво,
    yield from Class().init()
    , но более явно.
    Ответ написан
  • Как правильно парсить utf-8 в lxml?

    @766dt Автор вопроса
    Вобщем, проблема оказалась в странном поведении chardet:
    >>> cchardet.detect('Hyvä juoni'.encode())
    {'confidence': 0.8032709360122681, 'encoding': 'WINDOWS-1252'}
    >>> cchardet.detect('Hyv juoni'.encode())
    {'confidence': 0.0, 'encoding': 'ASCII'}
    >>> cchardet.detect('ä'.encode())
    {'confidence': 0.5049999952316284, 'encoding': 'UTF-8'}

    Пока лучшее, что придумал, это вручную задавать кодировку контента, если она известна.
    fragment = fromstring(content, parser = lxml.html.HTMLParser(encoding='utf-8'))

    А вот если кодировка неизвестна, и при этом неверно определяется при помощи chardet, то решения я пока не вижу.
    Ответ написан
    Комментировать
  • Как защитить изображения от PrintScreen?

    @766dt
    Все что попадает к пользователю априори может быть извлечено.
    Если данные, необходимые для для полного отображения картинки попали к клиенту(а они должны попасть целиком, чтоб отобразить целую картинку), значит можно восстановить полную картинку(КО спешит на помощь).

    Мое мнение - не заморачивайтесь защитой, которая не дала бы пользователю скопировать картинку.
    Хотите защитить картинку - прописывайте в пользовательском соглашении права на использование, делайте ограниченный доступ, на крайний случай ставьте какие-нибудь персональные для каждого пользователя метки на каждом изображении, чтоб знать через кого произошла утечка.
    Ответ написан
    1 комментарий
  • Возможен ли перехват вывода командной строки в реальном времени?

    @766dt
    Первые две ссылки в гугле:
    blog.endpoint.com/2015/01/getting-realtime-output-...
    stackoverflow.com/questions/803265/getting-realtim...

    Только насчет "привязать к переменной" я не понял, о чем это, если честно
    Ответ написан
  • Объясните ошибку в простой задаче [Python]?

    @766dt
    Ну основная проблема в том, что не тогда прибавляете 1 к счетчику, собственно об этом уже сказали.
    Если хочется покороче, и попроще(чтоб не думать когда делать +1), то можно так:
    n = int(input('Введите количество чисел: '))
    numbers = [int(input('Введите число: ')) for i in range(n)]
    print(numbers.count(0))
    Ответ написан
    Комментировать
  • Что делать что бы не потерять зрение?

    @766dt
    Найдите нормального окулиста и сходите к нему)
    Я думаю они на такие вопросы каждый день не по разу отвечают.
    Ответ написан
    6 комментариев
  • Python: как лучше удалить пустые строки и строки с 1 символом из текста?

    @766dt
    strings = (line for line in lines if len(line) > 1)
    
    for string in strings:
        print(string)
    Ответ написан
    Комментировать
  • Где и как исполняется асинхронный код в Tornado?

    @766dt
    Он не занят I/O. Он просто по кругу, на всех источниках I/O, по-быстрому проверяет не пришло ли что, и вот если пришло, то передает управление в корутину, которая ждала данных от этого источника.
    А дальше за асинхронную обработку ввода и вывода отвечает уже ОС, насколько я понимаю.
    Ответ написан
    Комментировать
  • Какой фреймворк на Python, подходит для создания браузерных игр?

    @766dt
    Можно конечно, что-то вроде БК.
    А вообще неплохо поучить фронтенд, сделав его в том объеме который потребуется. Ничего принципиально сложного там нет, а для расширения кругозора полезно)
    Не надо зацикливаться на одном Питоне, даже если нравится от слова совсем)
    Ответ написан
    Комментировать
  • Что лучше: Redis или Python dict?

    @766dt
    Лучше сразу Редис. Если потом возникнет желание отмасштабировать чат, все равно придется организовывать общение между несколькими процессами.
    Ответ написан
    Комментировать
  • Стоит ли становиться "чистым" программистом?

    @766dt
    "Программирование" это не область производства, это инструмент, помогающий решать различные задачи в разных производственных областях.

    Если "чистый программист" это тот кто только пишет код, то это как человек, который владеет инструментом, но пользуется им только по инструкции. Человек который не может ничего сделать сам никогда и не будет по настоящему востребован.

    Разработка, сопровождение, и тем более автоматизация каких-либо процессов или систем, не может быть голым программированием, и требует знаний какой-то предметной области. Этой областью может быть и робототехника и биоинженерия и BigData.

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

    @766dt
    Почитал документацию, там написано:
    Document constructor
    docx.Document(docx=None): ...

    Открыл исходники, там действительно:
    def Document(docx=None): 
        ...


    Если кратко, то docx.Document это не сам класс, а функция, которая вернет какой-то объект, и если к этой функции приделать атрибутом еще одну функцию, то созданный объект о ней ничего знать естественно не будет.

    Возможно можно просто прикреплять функцию к docx.document.Document, но не проще унаследоваться?
    Ответ написан
    1 комментарий
  • Возможна ли полная защита при синхронизации с сервером?

    @766dt
    Пользователю доверять нельзя, причем от слова "совсем".
    Абсолютно все, что происходит на стороне клиента можно подделать.

    UPD:
    Результаты действий в оффлайне можно как-то попробовать учитывать в виде анализа полного лога действий пользователя, в соответствии с которым будет происходить расчет результатов на сервере, с дополнительной проверкой, что такие действия можно честно выполнить.
    И естественно нельзя принимать от клиента какие-то готовые результаты.

    UPD2:
    Если действительно реализовывать схему с пересчетом на сервере результатов по логу пользователя, то может возникнуть проблема даже для нормальных пользователей, когда после синхронизации настоящий результат будет оказываться отличным от того. что было насчитано в онлайне. И если он будет отличаться не в пользу игрока, то может быть нехилое бурление.

    Так что такой вариант действительно можно рассматривать как крайний. Лучше всего, конечно же, полный расчет на сервере и клиент в онлайне.
    Ответ написан
    Комментировать
  • Более удобная обработка слов в генераторе списков?

    @766dt
    Когда генератор настолько усложняется, он прямой кандидат на разворачивание в полноценный цикл. По крайней мере именно в таком случае, когда стоит вопрос, либо генератор и два вызова функции, либо один вызов и цикл, я разворачиваю его не задумываясь.

    Генераторы это конечно хорошо и красиво, но не панацея же.
    Ответ написан
    Комментировать
  • В чем разница между methods=('GET', 'POST') и methods=['GET', 'POST']?

    @766dt
    Что правильнее - в зависимости от того что нужно получить. Если это неизменяемое перечисление, то можно подстраховаться от его изменения и сделать кортеж. Если нужно будет потом в этом списке что-то добавлять/удалять, то логично взять лист.

    Есть еще конечно отличие, в том что кортеж является hashable типом, что, например, позволяет использовать его целиком в качестве ключа словаря, но это я думаю не особо популярно.
    Ответ написан
    Комментировать