• Python. От теории к практике?

    saboteur_kiev
    @saboteur_kiev Куратор тега Python
    software engineer
    Суть вашего непонимания заключается в том, что сейчас программирование состоит не только из знания языка программирования, а из знания стека технологий, из которых можно построить продукт.

    Например, чтобы сделать веб-сайт на питоне, нужно понять как в принципе работает http, подучить html, понять как прицепить питон к веб-серверу (cgi?), разобраться как работает авторизация, как хранить данные (sql?). Часто для этого используют фреймворки, следовательно разобраться с ними, а для фреймворков уже нужен ООП.

    Поэтому попробуйте просто найти задачи, которые вам сейчас по силам - простые скрипты автоматизации. Рассчеты каких-либо полезных для вас вещей. Подучите стек технологий для чего-то большего.
    Попробуйте написать свои крестики-нолики.

    В общем учитесь дальше.
    Ответ написан
    Комментировать
  • Какой ФП язык выучить?

    @benoni
    программер-любтель, иногда подрабатываю фрилансом
    Еще есть:
    - Nemerle (тоже дот.нет, как и упоминавшийся F#, но инфы про немерле мало),
    - Rust (набирающий известность от мозилы, есть вроде даже книженция на руссом),
    - hy (лисп для питона, пока он больше экспериментальный),
    - Elm (хаскелеподобный язык, компилируется в JS),
    - Common Lisp (классический лисп, так сказать),
    - Scheme (больше учебный диалект лиспа, хотя есть Racket (диалект Scheme), который вроде кем-то даже для продакшена применяется),
    - Prolog (наиболее известный язык логического программирования).

    А так плюсы минусы наиболее популярных:
    - Erlang (ПЛЮСЫ: один из наиболее легких в изучении ФП языков, применяется в продакшене в сфере телекоммуникаций, а также в последнее время в вебе, в основном чаты и т.п.; МИНУСЫ: не является языком общего назначения, специфический прологовский синтаксис).
    - Clojure (ПЛЮСЫ: довольно легкий в изучении, JVM-платформа, ClojureScript (диалект кложуры для компиляции в джаваскрипт), есть порт на .NET-платформу, лисп; МИНУСЫ: JVM-платформа, другие реализации менее развиты, лисповые скобочки на любителя).
    - F# (ПЛЮСЫ: поддерживается майкрософтом и заточен под .NET, МИНУСЫ: ограниченность .NET-ом).
    - Scala (ПЛЮСЫ: набирает популярность, может через время очень потеснить джаву, доступна и ООП и ФП парадигмы, мощный, МИНУСЫ: сложный для новичнов в ФП).
    - Haskell (ПЛЮСЫ: очень мощный, практически универскальный, многие фишки современного программирования пришли из хаскеля, МИНУСЫ: довольно сложный для новичков, как и скала).

    P.S. я бы выбирал из кложуры, эрланга и хаскеля.
    P.P.S. если интересно в целом для себя можно ограничится Scheme и изучением SICPа.
    Ответ написан
    3 комментария
  • Какой ФП язык выучить?

    @protven
    +1 к leventov. Только Clojure, а не closure. Это если просто поучить хотите, вакансий по кложуре в России мало. А если с прицелом на будущую работу, то лучше Scala или Erlang.
    Ответ написан
    Комментировать
  • Как перевести этот пример на С++ и Python?

    angru
    @angru
    Каноничный код, ближе к вашему коду, чем в варианте от Andrey:
    with open('test.txt', 'r') as f:
        print(sum(len(line.split()) for line in f.readlines()))

    А это прям совсем как у вас:
    with open('test.txt', 'r') as f:
        print(sum(map(len, map(str.split, f.readlines()))))


    Вторая задача:
    # печатаем уникальные слова(ваш вариант с ошибкой)
    with open('test.txt', 'r') as f:
        for word in set(word.strip() for word in f.read().split()):
            print(word)
    
    
    # выводим слова и их количество(то, что вы подразумавали)
    from collections import defaultdict # словарь, для которого можно указать значения по умолчанию
    
    with open('test.txt', 'r') as f:
        words = defaultdict(int) # функция, вызывающаяся для каждого нового ключа, int() возвращает 0
    
        for word in (word.strip() for word in f.read().split()):
            words[word] += 1 # можно не проверять на наличие ключа, а сразу инкрементировать, т.к. значение по умолчанию - 0
    
        for word, num in words.items():
            print(word, '\t', num)
    Ответ написан
    1 комментарий
  • Sudo: add-apt-repository: command not found. Что делать?

    @a_alexeev
    sudo apt-get install software-properties-common python-software-properties
    Ответ написан
    Комментировать
  • Как и чем парсить сайты на python'е?

    @m0ody
    backend dev (python, django, postgresql, celery)
    Ответ написан
    Комментировать
  • Как и чем парсить сайты на python'е?

    webus
    @webus
    Golang | Python | NodeJS | Java
    scrapy.org
    Ответ написан
    Комментировать
  • План обучения Python и дальнейшие перспективы. Кто подскажет?

    @repost
    Сам недавно начал учить питон, мой выбор пал на learnpythonthehardway.org Хотя мне все показалось слишком "разжеванным", но если вы до этого не сталкивались с программированием, то это может быть наоборот плюсом
    Ответ написан
    Комментировать
  • Стоит ли переходить с Python на Go?

    @scft
    Программисты на Go, обычно, слишком быстро умирают от голода.
    Ответ написан
    Комментировать
  • Python for Android. Как начать?

    mysticmirage
    @mysticmirage
    Питон для Андроида — достаточно мозгозатратное занятие.
    Я бросил эту затею, хотя иногда слежу за проектами, подающими надежду в этом направлении.

    Если нужно создавать игры, то это PyGame for Android — pygame.renpy.org
    Если нужно бизнес-приложения, то это Kivy — kivy.org (их гитхаб — github.com/kivy/python-for-android)

    Недостатки первого:
    1. проект не развивается
    2. ориентирован на создание игр
    3. только arm-архитектура
    4. поддерживается только одно касание

    Достоинства первого:
    1. ниже порог вхождения — достаточно легко устанавливается (не без бубна, но легче, чем kivy)
    2. куча документации по самой PyGame, которую можно использовать при разработке

    Недостатки второго:
    1. требует от устройства поддержку gles 2.0 (даже для простенького интерфейса)
    2. везде с собой тянет библиотеку для построения интерфейсов
    3. нужно постараться, чтобы установить всё это добро (кросс-компиляция и всё такое)

    Достоинства второго:
    1. любая поддерживаемая Андроидом архитектура
    2. проект развивается
    3. поддержка мультитач
    4. использует наработки PyGame for Android

    По поводу sl4a — он не позволяет создавать обособленные пакеты — требуется отдельно установленный интерпретатор Питона. По этой причине я его не рассматриваю.

    В любом случае, стоит быть готовым к тому, что размер пакета будет минимум 3 МБ даже в случае HelloWorld — каждое приложение будет тянуть с собой интерпретатор и стандартную библиотеку.

    Следует отметить, что это не аналитическое сравнение — я отметил те пункты на которые обращал внимание. Возможно дела обстоят по-другому и я заблуждаюсь — я не использую Питон для Андроида ни в одном из своих проектов, хотя хотел бы.
    Ответ написан
    Комментировать
  • В чем принципиальное отличие unique (constraints) от unique index?

    alekciy
    @alekciy
    Вёбных дел мастер
    Разница в том, что ограничения (сonstraints) призваны обеспечивать целостность данных, а индексы (index) — скорость доступа к данным. Это две абсолютно не связанные сущности. Причем если первое — часть SQL стандарта, то второе нет (ибо ни как не связанно с функциональностью языка, введение индексов — вынужденная мера). Разработчик сам решает, в каких случая применить эти механизмы и использование одного вовсе не требует использование другого.

    Теперь касательно уникальности (unique). В данном случае при добавлении ограничения уникальности (unique constraint) Postgresql сам навешивает на указанное поле индекс. Это просто особенность реализации в данной СУБД. Разработчики решили, что вот так оно будет работать и все тут (причем небезосновательно). В другой же схожей ситуации они решили, что разработчик сам думает, нужно ли ему использовать этих два механизма вместе, или нет. Я говорю об ограничении целостности по внешнему ключу (foreign key). В Postgresql индексы по полям с данным видом ограничения не создаются (Индексы по внешним ключам в Postgresql). А, к примеру, в MySQL создаются. Это особенность реализации в MySQL.

    Поэтому важно просто понимать, что это не связанные вещи, просто в некоторых реализациях они «сцеплены» между собой и создание некоторых видов ограничений приводит к автоматическому созданию индекса.
    Ответ написан
    2 комментария