Задать вопрос
  • Как понять ошибку в коде Python (local variable 'cost' referenced before assignment)?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Понять так, что к переменной обращение происходит раньше, чем её присваивание. То, что столь простая ошибка ставит вас в тупик - является прекрасным показателем того, на сколько курс Codecademy хуже учебника.
    Ответ написан
    5 комментариев
  • Возможно ли провернуть такой финт ушами на java?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Эту задачу можно решить используя Compiler API. Пример использования можете посмотреть в этом ответе.
    Ответ написан
    1 комментарий
  • Пропадает мотивация к изучению python, правильно ли я делаю?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Но, я прекрасно понимаю, что делает определенная строка кода, что нужно изменить, чтобы заработало так, как нужно мне и т.д.

    Но не могу написать все сам с нуля, что-то вылетает из головы, что-то забываю, и снова приходится подглядывать.

    Это называется "иллюзией компетентности", ваш мозг вас обманывает.

    Важно правильно работать с учебным кодом. Не запускать скачанный с сайта издательства код, а набирать его самостоятельно, после прочтения главы, и пытаться запустить. Если запуск не получается, то главу вы не поняли и её надо перечитать. После того, как запуск удался, можно сравнивать свой код с кодом автора. Стоит поэкспериментировать с кодом, внести в него несколько изменений, чтобы убедиться, что вы действительно понимаете, как он работает, а не просто успешно повторили заученные действия.

    P.S. У вас заголовок вопроса расходится с текстом. Непонятно на что именно отвечать.
    Ответ написан
    3 комментария
  • Как создать контролер домена Active Directory на VPS/VDS или выделенном севере?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Так же, как контроллеру в локальной сети.
    Ответ написан
    Комментировать
  • Почему так происходит?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Лутц - "Изучаем Python", глава 20, страница 596
    Как известно, имена, которым выполняется присваивание внутри функции, по умолчанию рассматриваются как локальные – они располагаются в области видимости функции и существуют только во время работы функции. Но я еще не говорил, что локальные переменные определяются статически, во время компиляции программного кода в инструкции def, а не в соответствии с операциями присваивания, производимыми во время выполнения. Эта особенность становится причиной появления самых причудливых сообщений в группе новостей, получаемых от начинающих программистов.
    Обычно, если внутри функции имени не присваивается какое-либо значение, поиск его будет производиться в области видимости объемлющего модуля. Но посмотрите, что произойдет, если добавить инструкцию присваивания переменной X после ее использования.
    X = 99
    >>> def selector():
    ... print(X) # Переменная еще не существует!
    ... X = 88 # X классифицируется как локальная переменная
    ... # То же самое происходит при “import X”, “def X”...
    >>> selector()
    Traceback (most recent call last):
    ...текст сообщения об ошибке опущен...
    UnboundLocalError: local variable ‘X’ referenced before assignment

    Было получено сообщение о том, что переменная не определена, но причина его появления не очевидна. Этот программный код компилируется интерпретатором во время ввода в интерактивной оболочке или во время импорта модуля. Вовремя компиляции Python обнаруживает операцию присваивания переменной X и делает вывод, что X – это локальное имя везде в теле функции. Но во время выполнения функции, из-за того, что к моменту вызова инструкции print операция присваивания еще не производилась, интерпретатор сообщает о том, что имя не определено. Согласно этому правилу использования имен, он говорит, что обращение к локальной переменной X произведено до того, как ей было присвоено значение. Фактически любая операция присваивания внутри функции создает локальное имя. Операция импортирования, =, вложенные инструкции def, вложенные определения классов и так далее – все трактуются именно таким образом. Проблема возникает из-за того, что операция присваивания делает имена локальными для всей функции, а не только для той ее части, которая следует заинструкцией присваивания.

    Читать учебники - полезно.
    Ответ написан
    5 комментариев
  • В Linux в python относительные пути работают "нативно"?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Я не смотрел видео, но
    1. Хорошие программы на Python должны быть кроссплотформенными, соответственно стоит избегать путей с разделителями и использовать os.path.join() и другие переносимые средства работы с путями.
    2. Если вы используете Python2, то используйте Python3. А если используете Python3, то всегда указывайте кодировку при открытии файла и всегда используйте UTF-8 для кодирования файлов.
    Ответ написан
    8 комментариев
  • Что такое STOR в ftplib?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Плохо у вас с поисковой деятельностью. STOR - это одна из команд протокола FTP.
    Ответ написан
    4 комментария
  • Насколько актуально учить Java по книге Изучаем Java ( Кэти Сьерра и Берт Бейтс)?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    На дворе Java 12, зарелизят уже через неделю. У Java полная обратная совместимость, актуальны даже книги по Java 1.2. А для новичка нет лучше, чем учебники серии Head First.
    Ответ написан
  • В чем заключается преимущество питона?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    подойдет ли этот язык для изучения человеку, который знает относительно основы программирования?

    Подойдёт.

    в чем его преимущество

    Преимущества относительны и контекстозависимы. Что преимущество в одном проекте, то недостаток в другом. Однозначно, что работу на нём найти намного проще, чем на Pascal.

    актуален ли он вообще?

    Третье место в рейтинге TIOBE.
    Ответ написан
  • Нарушает ли композиция принцип единой обязанности из solid?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Нет, не нарушает. Композиция порождает зависимость, а не расширяет ответственность. Если зависимый класс соблюдает D, а класс зависимости соблюдает I и L, то всё в порядке.
    Ответ написан
    Комментировать
  • Дайте совет, как правильно развиваться в фронтенде?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Углубляться в чистый js и учить популярные фреймворки/библиотеки.
    Ответ написан
    Комментировать
  • Как добавить в путь // вместо / на C++?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега C
    Седой и строгий
    Экранирование слэшей имеет смысль только в литералах. Если вы получаете строку в переменную из функции, беспокоится об экранировании не нужно.
    Ответ написан
    Комментировать
  • Как работает аргумент as?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    Как присваивание.
    Ответ написан
    1 комментарий
  • Что за прикол на сайте?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Нет, не было. Используйте форму обратной связи, чтобы обратиться в техническую поддержку.
    Ответ написан
    Комментировать
  • Как сформировать словарь в цикле?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    result.update({i_random_id: {'name': imname, "count": count, "path":  path, "save_path": save_path}})
    Ответ написан
  • Как найти свою ц/а?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Для достижения успеха мало делать годный продукт, надо уметь его ещё продавать. А это отдельное, очень полезное искусство, которое нужно изучать. Вряд ли вам помогут какие-либо общие рекомендации без владения продажами.
    5c8b4032bf028955767631.png
    Ответ написан
    Комментировать
  • Почему не вычисляется значение типа Long?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Java
    Седой и строгий
    Есть две взаимосвязанных причины такого поведения. Во-первых, спецификация языка, стандартизирующая факт того, что перемножение int'ов даёт int:

    When an operator applies binary numeric promotion to a pair of operands, each of which must denote a value that is convertible to a numeric type, the following rules apply, in order:
    1. If any operand is of a reference type, it is subjected to unboxing conversion (§5.1.8).
    2. Widening primitive conversion (§5.1.2) is applied to convert either or both operands as specified by the following rules:
      • If either operand is of type double, the other is converted to double.
      • Otherwise, if either operand is of type float, the other is converted to float.
      • Otherwise, if either operand is of type long, the other is converted to long.
      • Otherwise, both operands are converted to type int.


    After the conversion(s), if any, value set conversion (§5.1.13) is then applied to each operand.

    Binary numeric promotion is performed on the operands of certain operators:
    • The multiplicative operators *, /, and % (§15.17)
    • ...

    Во-вторых, принципы работы стековых виртуальных машин. Вот так выглядит байткод метода main:
    public static void main(java.lang.String[]);
        descriptor: ([Ljava/lang/String;)V
        flags: ACC_PUBLIC, ACC_STATIC
        Code:
          stack=4, locals=6, args_size=1
             0: ldc           #2   // int 300000
             2: istore_1
             3: getstatic     #3   // Field java/lang/System.out:Ljava/io/PrintStream;
             6: ldc           #4   // String Input days:
             8: invokevirtual #5   // Method java/io/PrintStream.print:(Ljava/lang/String;)V
            11: new           #6   // class java/util/Scanner
            14: dup
            15: getstatic     #7   // Field java/lang/System.in:Ljava/io/InputStream;
            18: invokespecial #8   // Method java/util/Scanner."<init>":(Ljava/io/InputStream;)V
            21: astore        5
            23: aload         5
            25: invokevirtual #9   // Method java/util/Scanner.nextInt:()I
            28: istore        4
            30: iload         4
            32: ldc           #10  // int 86400
            34: imul
            35: iload_1
            36: imul
            37: i2l
            38: lstore_2
            39: getstatic     #3   // Field java/lang/System.out:Ljava/io/PrintStream;
            42: new           #11  // class java/lang/StringBuilder
            45: dup
            46: invokespecial #12  // Method java/lang/StringBuilder."<init>":()V
            49: ldc           #13  // String Light distance:
            51: invokevirtual #14  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            54: lload_2
            55: invokevirtual #15  // Method java/lang/StringBuilder.append:(J)Ljava/lang/StringBuilder;
            58: ldc           #16  // String  km.
            60: invokevirtual #14  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            63: invokevirtual #17  // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
            66: invokevirtual #18  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
            69: return
         LocalVariableTable:
           Start  Length  Slot  Name   Signature
               0      70     0  args   [Ljava/lang/String;
               3      67     1 lightSpeed   I
              39      31     2 calculatedDistance   J
              30      40     4 runningTime   I
              23      47     5 input   Ljava/util/Scanner;

    Интересны смещения с 30-го по 38-е. В стек загружаются два целых числа, перемножаются операцией imul, в результате которой с вершины стека убираются исходные два числа и помещается результат их перемножения, загружается ещё одно, ещё раз перемножаются, потом значение на вершине стека приводится к long операцией i2l и сохраняется в переменную calculatedDistance. Естественно, если результат работы imul окажется слишком большим, то произойдёт переполнение.

    Исправить это легко, достаточно изменить тип константы:
    calculatedDistance = runningTime * 86400L * lightSpeed;

    Тогда компилятор выберет другие опкоды, оперирующие long'ами:
    30: iload         4
    32: i2l
    33: ldc2_w        #10  // long 86400l
    36: lmul
    37: iload_1
    38: i2l
    39: lmul
    40: lstore_2
    Ответ написан
    2 комментария
  • Подтверждение лицензионности ПО в организации?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Боксовые лицензии не требуют никаких подтверждений, кроме самой коробки. У кого она в руках, тот и владелец.
    Ответ написан
    2 комментария
  • Как сделать дамп бд в heroku?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Heroku
    Седой и строгий
    1. Подключаете MySQL к проекту
    2. Загружаете дамп
    mysql --host=us-cdbr-east.cleardb.com --user=username --password=******* --reconnect database_name < dump.sql
    Ответ написан
  • Актуальность и целесообразность использования NodeJS?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    На фронте у вас нет выбора, а на бэке вы можете выбрать хороший язык. Поэтому забудь про PHP и NodeJS, бери Python.
    Ответ написан
    Комментировать