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

    Tark
    @Tark
    Pyramid'альный мир
    Потому что в переменной titles пустой список.
    Ответ написан
    Комментировать
  • И все-таки PHP 7 быстрее Python 3?

    Tark
    @Tark
    Pyramid'альный мир
    Но какая разница? У вас ведь скрипты ещё и с базами данных общаются?
    Предположим, написали вы сервис на чистом РНР без фреймворков, а для теста написали аналогичный сервис на Python/Django. Предположим, что на чистом РНР можно получить 10к запросов/сек, а на Django - жалкие 4к. Печаль.

    Но ваш сервис, например, будет использовать 5 запросов к БД, каждый из которых будет отрабатываться за 1мс. 5мс - чисто на запросы к БД.

    Итого: на РНР запрос будет выполняться за 5.0001мс, на Python/Django - за 5.00025мс... Неужели есть какая-то разница?
    Ответ написан
    6 комментариев
  • Как вернуть результат рекурсивной функции в переменную?

    Tark
    @Tark
    Pyramid'альный мир
    А если очень хочется разобраться с рекурсией, то вот:

    import os
    
    
    def SearchDir(path, z=[]):
        if os.path.exists(path):
            if os.listdir(path):
                for d in os.listdir(path):
                    if os.path.isdir(os.path.join(path, d)):
                        z += [(os.path.join(path, d))]
                        SearchDir(os.path.join(path, d), z)
            else:
                return print('The directory is empty')
        else:
            return print('The directory does not exist')
    
        return z
    
    path = r'f:\Python-pyramid\farm'
    print(SearchDir(path))

    Но вы видите, что код очень непричёсанный, да? Слишком много лишнего написано, да и return print удивляет.
    Ответ написан
    1 комментарий
  • Как правильно составить регулярное выражение на Python?

    Tark
    @Tark
    Pyramid'альный мир
    "Правильное" регулярное выражение для вашего случая

    m = re.search('<br/>(.*)<br/>', text)
    if m:
        print(m.group(1))


    Но тут есть одна проблема. br - непарный тег, у него нет ничего "внутри". Это первое. Второе: парсить страницы лучше специализированными фреймворками типа BeatifulSoup, Grab, lxml - там же есть и функции для очистки результата... наверное. Если нет - можно воспользоваться Bleach. Успехов.
    Ответ написан
    Комментировать
  • Как вывести значение из json?

    Tark
    @Tark
    Pyramid'альный мир
    > python, html, c#

    Внезапно PHP нет, а с ним было бы проще, ха-ха.

    Грубо говоря, json.dumps конвертирует словарь в строку. json.loads конвертирует строку в словарь. Словарь - "ассоциативный массив". Но в вашем словаре ключ users возвращает список (настоящий, неассоциативный массив). Если там есть данные, то после выполнения

    media = json.loads(api.json)

    к нему можно обратиться с помощью конструкции

    media['users'][0]['num']

    Где 0 - элемент списка, данные с которого нужно получить. Массивы, ну вы знаете. Не забудьте проверить, есть ли в json ключ users и не нулевой ли длины этот список. Успехов!
    Ответ написан
    4 комментария
  • Задача на Python, просьба помочь понять формулу, как она реализована?

    Tark
    @Tark
    Pyramid'альный мир
    ... если остаток n больше или равен 2 и меньше или равен 4, но при этом остаток от деления введённого числа на 100 меньше 10 или больше 20.

    Это для того, чтобы сказать "112 программистов", но "102 или 122 программиста".
    Ответ написан
    2 комментария
  • Как получить заголовки 403 ошибки?

    Tark
    @Tark
    Pyramid'альный мир
    https://docs.python.org/3/howto/urllib2.html#error...

    Чуть ниже пишут, что всё равно можно прочитать тело и заголовки, и приводят пару примеров.
    Ответ написан
    Комментировать
  • Как организовать общение между Python и Javascript?

    Tark
    @Tark
    Pyramid'альный мир
    Почему-то создаётся впечатление, что у вас проблема не с технологиями, а с самыми-самыми основами - с алгоритмами. Впрочем, не только у вас. Питон - это не волшебная палочка, которая решит все проблемы. "Как сделать лайки?". "У меня есть список комментариев, как вывести их количество?".

    У вас есть данные, которые получает скрипт, отвечающий за общение. Ваше дело, куда эти данные вывести - хоть в поле, любое. У вас УЖЕ ЕСТЬ ДАННЫЕ, какие с ними сложности?
    Ответ написан
  • Почему код не проходит тест?

    Tark
    @Tark
    Pyramid'альный мир
    Вам нужно найти наименьшее произведение четырёх последовательных чисел в строке. Отсортировать - это хитрый ход, но с сортировкой последний тест вернёт 1, а должен вернуть 4.

    Что до самого кода, то вместо перебора с range можно написать так:

    list = []
    result = 1
    for i in input:
        list.append(i)

    или по-взрослому
    result = 1
    list = [i for i in input]


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

    Задачу, наверное, лучше всего решить в лоб: перебирать строку от нулевого элемента до длины строки минус четыре (или пять?), брать по четыре цифры за раз, результат загонять в список, на выходе вернуть наименьшее значение списка.
    Ответ написан
    2 комментария
  • Что можно сделать на Tornado?

    Tark
    @Tark Автор вопроса
    Pyramid'альный мир
    Посмотрел на aiohttp, осталось странное такое впечатление.

    Начнём с того, что асинхронный aiohttp в 2-5 раз медленнее синхронных топов на самой простой задаче - вернуть JSON. Окей, в реальной жизни засчёт однопоточности и ненужности кеш-серверов скорость сгладится.

    Второе. Андрей Светлов говорил: "смотрите, у нас есть джынжа со с макой! Можно уже писать приложения!". Да.
    aiohttp_jinja2 не проверяет в декораторе значение, которое ей передаётся. Вернули не словарь? Нате пятихатку!
    Почему бы не проверять? Почему в шаблон не передаётся request по умолчанию, почему мне нужно будет вписывать его самостоятельно? Если бы мне хотелось многословия, я бы Django использовал.

    Третье, про aiohttp.web. В pyramid, к примеру, есть чёткое разделение между роутом и вью-функцией, где роут - это URL с именем, а во вьюшке можно определить обработчик роута в зависимости от HTTP-метода и прочего. В результате можно строить URL в шаблоне, указывая имя роута и необходимые параметры; очень удобно. В отличие от pyramid, в aiohttp есть понятие роута, где сразу же указывается HTTP-метод, URL и обработчик. Что самое злое, метод тут - ТОЛЬКО СТРОКА. Не список/множество возможных методов типа method=('GET', 'POST'), а только строка. В результате необходимо придумывать разные name для роута для одного и того же URL, что добавляет неудобства для их построения. И чёртово отсутствие request в шаблоне, чёрт бы его подрал. Ну не хочу я вертать взад dict(request=request, user='Tark'), я хочу без реквеста, но чтобы оно в шаблон передавалось самим aiohttp. Аргх!

    Что понравилось - aioauth-client. Ужасное название пакета, но какая прелесть внтурях. Осталось чуток дописать, чтобы не приходилось делать if 'twitter' elif 'github' elif 'google', добавить роутов и можно получить нормально работающий python-social-auth-light.

    Но пока что всё это слишком не доработанное. Разработка идёт гигантскими шагами, но результат пока ещё использовать тяжело.
    Ответ написан
    Комментировать
  • Как несколько раз отправить в Request один и тот же адрес несколько раз в Scrapy?

    Tark
    @Tark
    Pyramid'альный мир
    И снова Roman Kitaev прав :D

    return Request(link, formdata={'year': str(data)}, callback=self.parse_year

    Эта строка моментально вернёт результат. Сразу же. А вот если её заменить на

    def parse(self):
        result = []
        for data in years[1:8]:
            result.append(Request(link, formdata={'year': str(data)}, callback=self.parse_year))
        return result

    то она вернёт список из результатов запроса. Это то, что нужно?
    Ответ написан
  • TypeError: 'int' object has no attribute '__getitem__'?

    Tark
    @Tark
    Pyramid'альный мир
    if int(record[0]) < time_score:
        record[0] = time_score

    Похоже, в record[0] будет целое.

    record[0] = encryption(key, mode, iv, record[0])

    Вы передаёте в функцию значение record[0] (целое)
    В самой функции encryption

    def encryption(key, mode, iv, record):
        ...
        record[0] = encryptor.encrypt(record[0])  # record - не список! Это число!
    Ответ написан
    Комментировать
  • Как переписать класс?

    Tark
    @Tark
    Pyramid'альный мир
    Если нужно именно убрать избыточность и при условии, что код будет вызываться только вашим приложением, то можно его изменить таким образом.

    class Vehicle(API):
        def get(self, endpoint='/tanks/stats/', lang='ru', fields='', account_id=''):
            if type(fields) is list:
                fields = self._format_fields(fields)	
            return self._api_call(endpoint=endpoint, 
                                  fields=fields, 
                                  language=lang, 
                                  account_id=account_id)
    
    vehicle = Vehicle(...)
    
    stats = vehicle.get()
    achievements = vehicle.get('/tanks/achievements/')


    Если же этот код вызывается кем-то ещё, то сами понимаете...
    Ответ написан
    3 комментария
  • Стоит ли писать на питоне под винду?

    Tark
    @Tark
    Pyramid'альный мир
    Нет, не стоит.

    # encoding: utf-8
    
    print u'Чё это вдруг юникод у вас до сих пор не работает? Жуть какая!'

    pKMbCP7.png
    Ответ написан
  • Как вызвать глобальную функцию в методе?

    Tark
    @Tark
    Pyramid'альный мир
    Нужно написать название этой функции и поставить открывающую скобочку, а за ней - закрывающую. Если в функцию нужно передать какие-то параметры, их надо написать между скобочками.
    Ответ написан
    2 комментария
  • Как правильно использовать отступы в python?

    Tark
    @Tark
    Pyramid'альный мир
    Если Python ваш первый язык, вам очень повезло!

    if условие:
        действия при выполнении условия
    elif услоие:
        действия при выполнени услвоия elif
    else:
        действия во всех остальных случаях


    В вашем коде нужно сдвинуть блок от while до print('Завершение.') включительно на четыре пробела вправо.
    Почему повезло? Потому что у вас никогда не будет такого вот кода:
    void main()
    {
    printf('Something'); 
        f++; v *= 2;
    printf('Something else');
    
    
       foo(); }


    как будто кого-то вырвало на монитор.
    Python требует идеального, совершенного стиля оформления кода. Ну, кроме длины LoC в восемьдесят символов, тут вы можете спокойно нарушать это правило.
    Ответ написан
    Комментировать
  • Как правильно задать уникальное поле в mongodb?

    Tark
    @Tark
    Pyramid'альный мир
    Уникальным поле будет после добавления индекса по нужному (-ым) ключу(-ам) с опцией {'unique': True}
    Ответ написан
    2 комментария
  • Какие есть годные книги на русском по программированию web на python3?

    Tark
    @Tark
    Pyramid'альный мир
    Pure Python не применяется в веб-разработке потому, что... придётся писать свой веб-сервер, который будет слушать 80-ый порт, принимать запросы и вертать взад ответы. Хотя постойте, зачем писать веб-сервер? Есть же nginx! А приложения на Python веб-сервер отдаёт через uwsgi. Да! Тогда надо написать что-то, что будет отдавать в uwsgi сгененированный ответ. Получится что-то типа Werkzeug (часть Flask). Или что-то типа Gevent. Или что-то типа Twisted. Или что-то типа Tornado. Или что-то типа wheezy.web. Что-то, что называется WSGI-сервером. А потом на нём придётся сделать что-то типа фреймворка Bottle, чтобы можно было быренько и красиво делать то, ради чего это всё было написано.

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

    Tark
    @Tark
    Pyramid'альный мир
    Запрос "livestreet alternative python" выдало сие: https://github.com/mox1/webpy-bootstrap-blog

    Но, возможно, стоит послушать совета приверженеца Самого Лучшего Веб-языка На Свете, Фап-фап-фап-аххх! и написать его самому? Вы потратите несколько (десятков) часов, зато он будет не на webpy и не на SQLite.
    Ответ написан
  • Почему в России и СНГ так не популярен фреймворк Pyramid?

    Tark
    @Tark
    Pyramid'альный мир
    РНР ведь используют потому, что много разработчиков, а под CMS типа WordPress много няшных плагинов - всё это даёт надежду на быстрый запуск проекта, а вот с пирамидой всё придётся писать самому и с максимальной заточенностью. С другой стороны, вы можете рассказать про сервер о четырёх ядрах с гектаром памяти, который отрабатывает брутальные 30k rps/сутки (было упоминание о таком в одном из вопросов недавно) и скажете, что у вас всё будет работать на VDS с 400 мегабайтами памяти. Какая разница заказчику, на чём написан сервер, если всё работает?

    А что, документация на английском как-то затрудняет изучение?
    Ответ написан
    Комментировать