Змея / Говнокод #19150 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
try:  # эталонный говнокод
    height
except NameError:
    height = -99999

Запостил: nkonin nkonin, (Updated )

Комментарии (33) RSS

  • Говнокод выше, а именно там, где становится неизвестно, определена переменная или нет.
    Ответить
        • то что типизация в питоне динамическая, это я знаю.

          динамические переменные это когда, например, под `if`ом переменной присваивается значение и таким образом переменная создается. в дальнейшем коде, если переменная была создана, то к ней можно обращатся. если переменная не была создана, то обращение к ней будет вызывать run-time ошибку.

          я на питоне мало программировал что бы осознать эту тонкость.
          Ответить
            • мне почему то все время казалось что в питоне нормальные правила объявления переменных.

              как-то даже странно, что в перле есть объявление переменных - а в питоне нет.
              Ответить
              • В питоне обьявление переменных совпадает с первым определением
                Ответить
                • это не объявление - если оно не привязано к контексту.

                  типа:
                  if True:
                      a = 1
                  print a

                  почти во всех человеческих языках это будет синтаксической ошибкой, потому что `a = 1` существовало - и умерло - вместе с контекстом ветки `if`а.
                  Ответить
                  • это только в си такое есть локальная область видимости ограничена блоком {}
                    в пхп только функциями и неймспейсами ограничена.
                    в питоне аналогично.
                    Ответить
                    • > это только в си [...]

                      и в жабе. и в go. и в функциональных языках. и блин даже в перле. другими словами: подавляющее большинство языков.
                      Ответить
                          • Ну а какие они переменные, если их переменить нельзя? Константы, по сути.
                            Ответить
                              • Ну физически - да. Всё-таки процы создавать блоки памяти пока не научились. А логически - "переменная" сначала вообще не существует, а потом сразу рождается с заданным значением. Промежуточных этапов нету.
                                Ответить
                        • открой Пирса, первую главу про лямбда-исчисление, и узнай, как называются эти штуки в функцианальных языках
                          spoiler: variables, они же переменные
                          Ответить
                    • >> это только в си такое есть локальная область видимости ограничена блоком {}

                      штоа????

                      как раз в анси си она ограничена функцией (для автоматических переменных)

                      и в JS тоже

                      а везде в других языках она ограничена блоком
                      Ответить
                      • > как раз в анси си она ограничена функцией

                        Иди-ка почитай стандарт, гость. Даже в сишке 89 года можно объявлять переменные в начале блока.
                        Ответить
                        • Причём я никогда не понимал, почему её нельзя объявлять не в начале блока. Ладно бы ещё заставили писать их в начале функции, как в паскале... Была бы хоть какая-то логика.
                          Ответить
                        • Причём ладно бы ещё разделение деклараций и исполняемого кода, так там, емнип
                          {
                              // работает
                              int foo = get_foo();
                              int bar = get_bar(foo);
                              do_baz();
                          }
                          
                          {
                              // не компилится
                              int foo = get_foo();
                              do_baz();
                              int bar = get_bar(foo);
                          }
                          Так что я не вижу во всём этом абсолютно никакой логики...
                          Ответить
                  • В пистоне, как в JS и некоторых других скриптоязыках, областью видимости переменной является функция. Правда, в JS декларации есть, и они автоматически всплывают в начало скопа функции.
                    Ответить
                    • блин, да всё отличие пистончика от толпы его конкурентов это отсутствие явной декларации
                      Ответить
                • Не совсем.
                  Если внутри функции это имя (допустим 'a') не используется как локальная переменная - то есть нигде нет выражения 'a = ...', -- то при попытке прочесть её интерпретатор полезеть искать её наверх по скоупам, включая глобальный, а если не найдет, кинет NameError.

                  Если же такое выражение хоть где-то есть внутри функции, но не было вызвано до обращения, то интерпрератор никуда не полезет и сразу кинет UnboundLocalError.

                  https://ideone.com/daKQlt
                  Ответить
      • В пхп луа и ко если переменная не существует возвращается nil, а в питоне кидается nameerror
        Ответить
    • в ответе, питонов `in` используется - это вроде бы линейный поиск?
      Ответить
    • На myVar ты можешь в иде кликнуть и перейти к определению, посмотреть где она используется, в отличие от ''myVar"
      Ответить
  • Они съели шашлык и поехали прогуляться по центру. А уже под вечер Евгений повёз парня к гостинице "Украина". Они погрузились на яхту-ресторан и, уплетая десерт, любовались видами вечерней Москвы.
    Ответить

Добавить комментарий

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8