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

    −2

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    Какой есть аналог класса для данных?
    
    class Record():
        pass
    
    r = Record()
    r. asd = 1
    
    Заебало класс объявлять, неужели для такого элементарного случая ничего не придумали?

    Запостил: syoma, 25 Мая 2018

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

    • stok
      Ответить
      • пусть борманд покажет посты в ленте
        Ответить
    • Не надоело ещё путанить питонить?
      Ответить
      • Первый раз я попробовал Питон в седьмом классе. Мы с пацанами, как обычно, на информатике рисовали курящего снеговика в Бейсике, вдруг вошел плечистый парень - как оказалось, новый учитель информатики.
        Мы очень испугались, что нам влетит за занятие хуйнёй во время урока, но он ласково улыбнулся, сказал, что не сдаст.
        Он предложил нам попробовать кайф, более мощный, чем мог дать Бейсик: творение Гвидо.
        Мы сперва оробели. Но он отсыпал каждому по примеру на Питоне и сам взял за щеку, проверь. Самые смелые попробовали, следом и другие.
        Это стало повторяться изо дня в день, но Толик (так звали парня) вдруг заявил, что на шару кайфа больше не будет, и за дозу теперь надо будет платить.
        В качестве расплаты он иногда просил отнести дистрибутив Питона по адресу - иными словами, исполнить роль дистрибьютора.
        Таким образом мы, тогда ещё школьники, против своей воли оказались втянуты в липкие сети организованной преступности.
        Сейчас я делаю это ради бабок. РАДИ ВПОЛНЕ РЕАЛЬНЫХ БОЛЬШИХ БАБОК.
        Да, чёрт возьми, я тоже хочу жрать бутеры с красной икрой, ездить на приорах и трахать красивых тёлок - и мне плевать на всех и вся.
        Короче, слухай сюда, баклан: бог-жид создал этот мир для пацанов - реальных пацанов,- а лохи, сучата и фраера и прочая шелупонь лохматит жопу,
        чтобы пацанам пёрло. Фуфелам ничем не пдмогнёшь, а если решишь подмогнуть, сам зашкваришся. Запомни: тебе хорошо - потому, что плохо другим.
        Ответить
        • >Запомни: тебе хорошо - потому, что плохо другим.
          А питон тут причём? Или разносить питон виндузятникам, у которых потом всё будет глючить и модули не будут ставиться?
          Ответить
      • Надоело, уже делфи осваиваю
        Ответить
        • Для твоих поделок на 10 строк он будет в самый раз.
          Кстати, удав - самый тупой из всех скриптовых, встреченных мной. Хуже только руби.
          Ответить
          • > поделок на 10 строк он будет в самый раз
            Питония для этого и существует. Ну, ещё для веба. И для меня :)
            Ответить
            • Как-то глупо учить язык ради поделок о десяти строках, не считаешь так?
              Ответить
              • По быстрому нахуярить программу.
                Ответить
                • Ну да, могу себе представить.
                  Ответить
                  • Я запутался, мы про Дельфий или Питно?
                    Ответить
                    • Это теперь уже не важно. Кстати, с твоими файками приятно общаться. Анонимность раскрепощает - но я не заметил за тобой чего-либо такого.

                      Мы очень испугались, что нам влетит за занятие хуйнёй во время урока, но он ласково улыбнулся, сказал, что не сдаст.
                      Ответить
                      • ?
                        Ответить
                        • Что - ? Минимальная языковая единица - слово. Я не понимаю тебя.

                          ...In the beginning was the word. And the version of the Word was 1.0
                          Ответить
          • Питон один из лучших скриптовых языков
            лучше только руби)

            Ты, вероятно, имел какой-то опыт с одноглазым брючным питоном, но python-то тут причем?
            Ответить
    • На правах безумия: https://ideone.com/d4BJ5j
      Ответить
      • Многабуков. А тащить зависимости ради одной-двух лишних строчек... Единственный плюс - repr() будет читаемым.
        Ответить
      • Тащемто это argparse.Namespace. https://ideone.com/3tLtTq
        Ответить
    • dict
      Ответить
      • a["hui"] = 42 vs a.hui = 42

        Некрасиво же. Кучу мусора писать приходится.
        Ответить
    • я обычно так делаю
      from collections import namedtuple
      
      Record = namedtuple('Record', ['asd'])
      брат жив
      Ответить
      • Ты питонист???
        Ответить
        • > Ты питонист???

          Нет уж, избавьте. Я на этом змеином говне пишу только если совсем уж другого выхода нет.
          Ответить
          • Это например когда?
            Ответить
            • Возможно, ты не заметил, но «Python» по какой-то необъяснимой причине стал языком «Data Science». Почти все самые популярные либы для обработки данных и «Machine Learning» написаны на этом чуде. В частности, чудесный апи «TensorFlow» сочетает выразительность «Java» с типобезопасностью «Python».
              Кстати, есть даже аналог Google.Docs для Jupyter
              https://colab.research.google.com/
              Ответить
              • >>>"Google.Docs"

                >>>"Jupyter"


                Забыл.
                Ответить
              • >с типобезопасностью «Python».
                Которой в "жаве" нету?
                Ответить
                • Это был хьюмор такой

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

                      строгая типизация? тогда таки да -- в питоне она строгая (слава богу кстати)
                      Ответить
                      • > строгая типизация? тогда таки да -- в питоне она строгая (слава богу кстати)

                        Я имел в виду, что ошибки в программе находятся только в процессе выполнения. Люто бесит, когда через несколько минут после запуска из какой-то жопы либы прилетает исключение типа "я ожидал np.array, а ты мне дал list". Разумеется, в доке про ожидаемый тип ни слова, исследуешь апи путём проб и ошибок. Попробую сунуть X в O, авось не взорвётся.
                        Ответить
                        • Ну вообще говоря ХОРОШИЕ доки указывают тип.

                          Но ты прав: невозможность проверить тип статически (с помощью линтеров или компилятора) люто бесит в питоне

                          правда там уже есть pep 484, но я не уверен что его кто-то юзает
                          Ответить
                          • > Но ты прав: невозможность проверить тип статически (с помощью линтеров или компилятора) люто бесит в питоне
                            - внезапно в треде про интерпретируемый язык появилось слово "кокомпилятор"
                            Ответить
                            • Внезапно интерпретатор Питона компилирует текстовый исходник в байткод (.pyc-файлы).
                              Ответить
                              • Как конпеляция связана с проверкой типов?
                                Ответить
                                • > внезапно в треде про интерпретируемый язык появилось слово "кокомпилятор"

                                  > Как конпеляция связана с проверкой типов?

                                  В Питонии никак.
                                  Ответить
                          • А что с ним делать? От этих типов есть какая-то польза?
                            Ответить
                          • > я не уверен что его кто-то юзает

                            У нас используется и сносно довольно работает, но только на бэкенде и в тулах, а в юпитер-нотбуки это не интегрировано.
                            Ответить
                        • Кащепузь, ну ты чо, а еще в гугле работаешь. Это статическая, а не строгая.

                          Самый кайф это
                          if redkoe_sobitie():
                              a = 'a' + 1

                          Само собой, редкое событие происходит у клиента, но не у разраба.
                          Ответить
                          • > Это статическая, а не строгая.

                            Я не знаю, кто придумал эти "термины", но к реальной науке они никакого отношения не имеют. Я написал "типобезопасность", имея в виду лишь отсутствие вменяемого тайпчекера из коробки. Это даже не означает, что такого тайпчекера для бидона никогда не появится (mypy, pyre), и он внезапно станет "статически типизиованным".
                            Ответить
                            • Я неебу что за науку ты изучаешь, но эта терминология вполне общепринятая.
                              Ответить
              • >>» по какой-то необъяснимой причине стал языком «Data Science»
                IPython Notebook может быть

                С другой стороны не сосет-ли он у Wolfram / Mathematica?
                Ответить
                • > С другой стороны не сосет-ли он у Wolfram / Mathematica?

                  Mathematica это, конечно, круто, но инструменты, используемые в науке, должны быть бесплатными и публично доступными.
                  Ответить
                  • А GNU Octave, Scilab, GAP, Reduce?
                    Ответить
                    • > Octave

                      В самом популярном курсе по ML на курсере, кстати, использовали Octave, и он мне показался гораздо более интуитивно понятным, чем тот же numpy.

                      Остальное не пробовал. Иногда балуюсь с Maxima, но ей до Mathematica по возможностям и удобству ещё очень, очень далеко.
                      Ответить
                      • Решил поставить Octave на мак, в общем, не понравился ему системный gcc, щас из brew компилирует лол
                        Ответить
                        • >>компи
                          ща сема заорет про пердолинг
                          Ответить
                          • Обошлось собранным пакетом, на который сначала не увидел ссылку. Но было забавно
                            Ответить
              • Ты дата сайнтист?
                Ответить
                • > Ты дата сайнтист?

                  Нет. Поэтому ковырять питона приходится редко, но совсем его не видеть не получается. Плюс многие внутренние утилиты на питоне написаны, иногда окунаюсь, чтобы починить что-нибудь раздражающее. Благо, у нас во многих местах уже type hints используются.
                  Ответить
                  • А я вот, наоборот, пишу на питоне все, что нет необходимости писать на плюсах. Всякие мелкие утилитки, скрипты для обработки данных и т.п. Потому что на нем быстрее хуяк-хуяк и в бой.
                    Ответить
                    • > Всякие мелкие утилитки, скрипты для обработки данных и т.п.

                      Совсем мелкие утилитки я на bash набрасываю, так куда удобнее, когда надо несколько бинарников утилит склеить. Из последнего:
                      "Найди все таргеты билд-системы, которые напрямую зависят от X и вызови утилиту U на с++-исходниках каждой зависимости".
                      Ответить
      • Он неизменяемый, кащепузя. Изменяемый гнидо не заказал.
        Ответить
        • > Он неизменяемый

          Как будто что-то плохое.
          Ответить
          • Сказал функцианальщик.
            Ответить
          • Мне он не нужен. Алсо, и он сам по себе не гарантирует немутабельность - всё дерево что в него включено должно быть немутабельным.
            Ответить
      • australia = OpenStruct.new(:country => "Australia", :population => 20_000_000)
        p australia.population # понятно что
        p australia # <OpenStruct country="Australia" population=20000000>


        руби)
        Ответить
        • struct {
            string country;
            int population;
          } country;
          Язык сам знаешь.
          Ответить
          • В твоем варианте нету чудесного метода toString:)

            но вообще да: написать структуру в си проще, чем класс в джаве например
            Ответить
            • Да разве?
              Ответить
              • ну напиши мне правильный датакласс в жабе
                с тустрингом, хешкодом, конструктором и геттерами
                Ответить
            • > написать структуру в си проще, чем класс в джаве например
              Если тебе надо конвертировать стракты в строку или использовать как ключ в хэш-таблицы, то не проще. По правде говоря, мне почти никогда не надо. Я часто использую анонимные структуры. Например, что-то вроде
              struct { const char* name; void (T::*member)(); } actions[] = {
                {"kill_all_humans", &T::kill_humans },
                {"launch_rockets", &T::launch_rockets}
              };
              for (const auto& action : actions) {
                // do something with action
              }
              Ответить
    • Этот код рабочий? Где же ваша сильная типизация?
      Ответить
      • (щас налетят питухи, и будут говорить что это не имеет отношения к сильной/слабой типизации)
        Ответить
        • Желание Сёмы относится не к слабой типизации, а к выводу типов. Это как волшебное слово auto в крестах, которое предлагает конпелятору угадать, чего же хотел программист.

          Да, на возможность статического анализа влияет отрицательно, как и слабая типизация.
          Ответить
      • А в чём проблема?
        Ответить
    • То ли дело JavaScript.
      Ответить
      • А я "PHP" вспомнил:
        <?php
        $r = new stdClass();
        $r->asd = 1;
        Ответить
        • Как-то не очень от Питонии отличается. То ли дело JS, где можно и var o = {}; o.asd = 1;, и сразу var o = {asd: 1}.
          Ответить
          • $r = ['asd' => 1];

            но токо это аналог dist в питонии
            Ответить
    • Предлагаю искать уязвимые объекты, которые коротко записываются, и пихать в них.
      >>> o=lambda:0
      >>> o.asd=1
      >>> o.asd
      1
      Ответить
    • по перше филды треба объявлять в конструкторе
      а по друге в 37 есть датаклассы а еще есть какие-то проекты где можно декоратор юзать
      и наконец есть неймдтуплы

      но ооп в питоне дюже вербозное, тут не поспоришь
      Ответить
      • >филды треба объявлять в конструкторе
        Хто сказал?

        3.7 уже вышел? Тупл немутабельный, я выше писал.

        Нужно например здесь
        sum = 0
        def func():
            sum +=1


        nonlocal завезли только в тройку.
        Ответить
        • >>Хто сказал?
          pycharm))

          ну pep8 тоже наверное

          37 будет в июне

          читни пепца: https://www.python.org/dev/peps/pep-0557/
          Ответить
          • >будет
            Ну как будет - позовёте.
            Ответить
          • https://www.python.org/dev/peps/pep-0557/#automatically-support-mutable-default-values

            Нинужно. Неужели нельзя было вместо значения принимать функцию?
            Ответить
    • А чем не устраивают словари, списки, кортежи?
      Ответить
    • Чем плохо:
      >>> class a: pass
      >>> a.asd = 42
      >>> a.asd
      42
      ?
      Ответить
    • А чо нельзя как в lua совсем без класса обойтись? Табла и все такое
      Ответить
      • А как бы выглчдело в Lua? (Я его плохо знаю)
        Ответить
        • Перегрузить ссаную точку для таблы, вроде можно вообще глобаль перегрузить точку, ща потестю посмотрю.
          Ответить
        • В общем побаловался и самым элегантным примером будет все таки просто таблица t = {}
          Ну и просто забава
          _G = setmetatable(_G,{__index = function() return setmetatable({},{__index = _G}) end})
          print(allah,_G) --Разные таблы, при этом аллах даже никак не объявлен
          anus.n = 10 --Это будет табла и anus.n будет таблой
          anus = {n=10} --Это будет хорошо и anus.n будет 10
          HUYZOLOTOY.table.insert(anus,10) --Нормас работает
          print(anus.opa) --А это не табла а просто nil
          for k,v in uier8u43uirhn_________.pairs(_G) do
          	hjashsnasmm.print(k,v)	--А где Allah и все остальное?
          end
          Ответить
          • ХубаБубаСкрипт :)
            Ответить
          • > uier8u43uirhn_________
            > hjashsnasmm
            Кто такие? Неужели не могли осмысленные имена дать?
            Ответить
            • > ier8u43uirhn_________.pairs(_G)
              Я понял. У необъявленной таблицы вызывается метод, и аргументом передается _G. А то мне сперва показалось, что ier8u43uirhn_________ встроенная штука.
              Ответить
              • Хуй, не угадал.
                Любой не объявленной глобальной переменной, в место nil будет хуярить, таблицу. Так как любая глобальная переменная объявляется в таблице _G, то собственно прикручиваем поведение __index, которая возвращает таблицу с поведением __index (Это типа условие если index не существует то) обращается в случае к _G.
                И того получаем, что даже аллаху присваевается "псовдокласс" даже не объявляя его.
                Ответить
                • Жаваскрипт нервно курит в сторонке.
                  Ответить
                  • Не совсем верно что они присваиваются. Так как не объявленные хуйни все так же не будут существовать.
                    Так как print(allah,allah); выдают разные таблицы, следовательно в данном случае мы просто срем в памяти, теряя ссылки на все созданные таблицы.
                    Просто вызывая несуществующий глобаль мы возвращаем псевдокласс, значит allah = allah будет работать как нужно, таблица не будет утеряна. И аллах уже будет объявлен.
                    Можно быстренько исправить кодик чтоб несуществующие присваивались.
                    Ответить

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