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
      Ответить
    • Не надоело ещё путанить питонить?
      Ответить
      • показать все, что скрытоvanished
        Ответить
        • >Запомни: тебе хорошо - потому, что плохо другим.
          А питон тут причём? Или разносить питон виндузятникам, у которых потом всё будет глючить и модули не будут ставиться?
          Ответить
      • Надоело, уже делфи осваиваю
        Ответить
        • Для твоих поделок на 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'])
      брат жив
      Ответить
      • показать все, что скрытоvanished
        Ответить
        • > Ты питонист???

          Нет уж, избавьте. Я на этом змеином говне пишу только если совсем уж другого выхода нет.
          Ответить
          • Это например когда?
            Ответить
            • Возможно, ты не заметил, но «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, но я не уверен что его кто-то юзает
                          Ответить
                          • > Но ты прав: невозможность проверить тип статически (с помощью линтеров или компилятора) люто бесит в питоне
                            - внезапно в треде про интерпретируемый язык появилось слово "кокомпилятор"
                            Ответить
                          • А что с ним делать? От этих типов есть какая-то польза?
                            Ответить
                          • > я не уверен что его кто-то юзает

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

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

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

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

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

                  Mathematica это, конечно, круто, но инструменты, используемые в науке, должны быть бесплатными и публично доступными.
                  Ответить
                  • показать все, что скрытоvanished
                    Ответить
                    • > 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
              }
              Ответить
    • показать все, что скрытоvanished
      Ответить
    • То ли дело JavaScript.
      Ответить
    • Предлагаю искать уязвимые объекты, которые коротко записываются, и пихать в них.
      >>> 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 будет работать как нужно, таблица не будет утеряна. И аллах уже будет объявлен.
                    Можно быстренько исправить кодик чтоб несуществующие присваивались.
                    Ответить

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