1. Python / Говнокод #25181

    +1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    def enum(x):
        globals().update(map(reversed, enumerate(x.split())))
    
    enum("""
        ONE
        TWO
        THREE
        FORTH
    """)

    Forth влияет...

    Запостил: 666_N33D135, 12 Декабря 2018

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

    • #python-govno
      Ответить
    • Мне чот казалось что globals копию возвращает
      Ответить
      • Когда кажецца крестица нада
        https://ideone.com/fnyRQK
        Ответить
        • И зачем тогда вызов функции?
          Ответить
          • Потому что «globals» — это функция.

            RTFM: https://docs.python.org/3.7/library/functions.html?highlight=globals#globals
            Ответить
            • Спасибо, кэп хуев. Зачем сделали вызов? РТФМит он меня, блядь.
              Ответить
              • Почему не сделали переменную? Наверное, чтобы нельзя было ей другой объект присвоить.
                Ответить
              • > Зачем сделали вызов?
                У Гвидо надо спрашивать. Подозреваю, что из-за вот этого:
                This is always the dictionary of the current module (inside a function or
                method, this is the module where it is defined, not the module from which it is called).


                А свойство — это и есть небольшой сахарок над вызовом функции, что, в общем-то, не очень укладывается в Питоновское «Explicit is better than implicit».
                Ответить
                • А, так это переменные уровня модуля, а не глобальные.
                  Ответить
          • В Питоне почти всё возвращает ссылку. Чтобы получить копию, нужно самому пердолиться с клонированием.
            Ответить
            • примитивы копируются. int например. За str не скажу, да это и не важно бо она и так неизменяемая.
              Ответить
              • Как ты узнал, что int копируется? А если это bigint?
                Ответить
                • Я читал про двойку, вероятно в тройке с бигинтом это и не так, надо смотреть сырцы cpython.

                  Но чисто логически если это не бигинт а обычный инт то зачем размещать его черте где и возвращать ссылк? Он же мелкий.

                  Вообще программист не должен об этом думать. Можно вообще думать что всё всегда лежит в кучке и работает через ссылко, просто некоторые вещи ридонли
                  Семантика-то одинаковая
                  Ответить
                  • В Питонии 3 есть только int, он с произвольной точностью. Это в двойке были инт и лонг.
                    Ответить
                    • Если там на самом деле (не в до-ко-ко-коментации, а реально внутри) только int с произвольной точностью, и нет нормального инта, этот язык тормознутое говно надо выкидывать.

                      Когда python перейдёт в XXI век? Программист должен выражать идеи, а задача компилятора - написать под них быструю программу (как реализовано в SQL, JavaScript, C++).
                      Ответить
                  • > размещать его черте где и возвращать ссылк
                    Так и сделано. Ещё есть кеш с маленькими пислами.
                    Ответить
                    • А в Питонии можно отравить кэш махоньких чисел, как в Жабе?

                      http://govnokod.ru/16233
                      Ответить
                  • Эээ, во втором питоне разве не бигинт?
                    Ответить
                  • Если относительно маленькие значения хранятся в машинных интах, которые при переполнении автоматически промоутятся до бигинтов, то говорить о передаче по ссылке или по значению смысла вообще нет: это зависит от размера числа.
                    Ответить
                    • Я думаю что так и есть. Но это деталь реализации.
                      Ответить
                    • В питоне все передается по значению. В том числе и ссылки.
                      Ответить
              • Какие ещё примитивы? Всё есть объект..Все переменные хранят ссылку, функции возвращают ссылки, везде ссылки. Просто объекты типа int, float, str, tuple неизменяемые.
                Ответить
              • В питоне нет примитивов, всё передается по ссылке.
                Ответить
    • <?php
      function enum($x) {
          $tmp = array_flip(preg_split('/\W+/', $x, -1, PREG_SPLIT_NO_EMPTY));
          array_walk($tmp, function($value, $key){$GLOBALS[$key] = $value;});
      }
      
      enum(<<<'S'
          NULL
          ONE
          TWO
          THREE
          FORTH
      S
      );
      
      printf("%d %d %d %d %d\n",  $NULL, $ONE, $TWO, $THREE, $FORTH);


      Куд-кудах:
      https://ideone.com/hlQv7C
      Ответить
    • Если бы языки программирования рекламировали по телевидению, то "ONE, TWO, THREE, FORTH!" криэйтор бы назвал продающим слоганом и записал бы в книжечку.
      Ответить

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