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

0

  1. 1
  2. 2
  3. 3
  4. 4
XRU = "XRU"
PITUH = "PITUH",
KUROCHKA = "KUROCHKA"
PETUH = PITUH.replace('I', 'E')

Traceback (most recent call last):
File "./prog.py", line 4, in <module>
AttributeError: 'tuple' object has no attribute 'replace'

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

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

      • Тупла вообще малоприятный тип. Зачем он нужен в языке -- я не понимаю.
        Ответить
        • Ели туплы мужики, пивом запивали!
          О чем Гвидо говорил, они не понимали!
          Ответить
        • В основном из-за ключей в мапе, как я понимаю.

          Мутабельные вещи ключами стрёмно пихать т.к. инварианты дерева могут рассыпаться.

          Ну и для разврата нескольких значений из функции. Возможно, это немного эффективнее чем лист.
          Ответить
          • >В основном из-за ключей в мапе, как я понимаю.
            так сделали бы frozen list, нафиг сущность заводить?

            >Ну и для разврата нескольких значений из функции.
            типа как pair?

            опять таки, почему не frozen list?

            >эффективнее
            в скриптушне разве я должен про это думать?
            Ответить
            • > frozen list

              Тупл это обычная математическая питушня, а Гвидо был тем ещё ма-те-ма-ти-ком.

              Кроме того, он сам по себе отличается от листа. У тупла даже размер меньше чем у списка.

              > Эффективнее

              В одной ОС для домохозяек не подумали об эффективности, и рабочий стол там сортирует иконки суперпузырьком )))
              Ответить
              • если это математическая питушня, то зачем питухи используют ее как ридонли лист? и зачем вообще такая питушня?


                >эффективности

                скриптоговно без JITа где каждый питух работает по ссылке это конечно офигенно эффективно, именно замена листа на тупл нас всех спасет)
                Ответить
                • > если это математическая питушня, то зачем...

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

                  > зачем вообще такая питушня?

                  Она эффективнее, она удобная для своих кейсов каких-то. С помощью неё можно писать на питоне в функциональном стиле, который тебе так нравится.

                  > скриптоговно без JITа

                  Скриптоговно с JITом, конечно, будет сильно эффективнее. Если программист – кодер. А вот настоящий программист критические места перепишет на сишку, либо использует модуль, который подключает сишку. Потому что JIT – это полумера.

                  > замена листа на тупл нас всех спасет

                  Это капля в море. Но нельзя забывать, что море состоит из множества капель.
                  Ответить
        • Какие ещё варианты сделать множественный гетерогенный типизированный возврат из функции? В некоторых языках ещё и с именованными полями
          Ответить
          • Ну хотя тред же про Питон

            В нём не знаю, зачем отдельно
            Ответить
          • > множественный гетерогенный типизированный возврат из функции

            В Lua, к примеру, это просто специальный синтаксис. Никакие туплы там не создаются и не возвращаются, просто на стек пушится несколько результатов.
            Ответить
            • Не знаю, что сказать

              Кроме того, что это не помешало златохую уйти из программирования
              Ответить
              • function test()
                    -- пушит 2 числа на стек
                    return 42, 100500
                end
                
                -- снимает 2 числа со стека
                a, b = test()
                
                -- снимает одно число и дропает второе
                a = test()
                Ответить
                  • _, b = test()

                    З.Ы. Можно и все в таблицу захватить: t = {test()}
                    Ответить
                    • А оно не сохранит в «_» первое число?

                      В питоне можно так:

                      b = test()[1]
                      Ответить
                      • > А оно не сохранит в «_» первое число?

                        Сохранит конечно... Боишься, что память потечёт?
                        Ответить
                          • На самом деле, первое значение обычно самое важное, его редко дропают.
                            Ответить
                            • насколько идеоматично вернуть таблу вместо нескольких значений?
                              Ответить
                              • Х.з., я сварщик не настоящий. Табла хуже по пирфомансу, так что это скорее для случаев, когда тебе реально надо таблицу/объект/массив вернуть.

                                А мультиразврат -- это просто всякие мелочи в духе key/value, error/result и т.п.
                                Ответить
                                • пнятно, что хуже, там целый объект в память среца.

                                  Я к тому, что вот допустим мне нужно вернуть пять значений. Очевидно, лучше венуть таблу с нормальными ключами.

                                  А два можно и через запятую.

                                  В питоне есть тупла о девяти числах для представления времени, и конечно за такое нужно гореть в аду
                                  Ответить
                    • да могу только догадываться, как потом читать такой код

                      вот тут мы приняли значение, а, оказывается, могли два. а может даже и три! скриптуха такая скриптуха

                      как это можно сравнивать с семантикой кортежей, вообще не представляю, сосёт же
                      Ответить
                      • в скриптухе ты никогда не знаешь, что тебе вернут, пока ты не прочитаешь документацию.

                        Ну вернут тебе кортеж в питоне, и откуда ты знаешь сколько там членов, какой у них смысл, и вообще что тебе вернули кортеж?
                        Ответить
                        • ну и это типа заебись?

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

                            Но мы же сравнивали кортеж в питоне изначально с мультивозвратом в луа.
                            Ответить
                            • Кортеж лучше. Функция возвращает два значения независимо от того, сколько нам нужно, и питоновский кортеж делает это более явно.
                              Ответить
                              • почему более явно?
                                В чем разница?

                                Зачем вообще кортежи в скриптушне? Почему не возващать стурктуры/объекты как в JS или lua, или не делать вот мультвозврат?

                                Вообще чем меньше типов данных в СКРИПТУШНЕ - тем лучше. Потому что тем она проще. А перформанс это не про скриптушню.

                                В питоне очень много типов, куда больше, чем нужно.

                                А в луа их вроде всего 3
                                Ответить
                                • Для error, result тоже делать структуру?

                                  Ты ещё кресты поругай за struct / class )))

                                  А ещё можно сделать скриптушню с ASM синтаксисом. Там вообще не будет типов данных!
                                  Ответить
                                  • да, а что такого?

                                    мне проще запомнить имя поля, чего его порядковый номер, не?
                                    Ответить
                                    • Мне тоже, если честно. Но захламлять код такими структурами тоже не очень хочется, особенно скриптовый. Да и всё равно придется доки читать, раз уж скриптуешь, чего бы и не посмотреть что функция возвращает, благо в питоне документация есть прямо в интерпретаторе.
                                      Ответить
                                      • но почему захламлять?
                                        скриптушня должна иметь структурную або утиную тупизацию, не требовать явного создания объекта:

                                        return {
                                        foo: 12,
                                        buz:14
                                        }
                                        Ответить
                                        • Ты не поверишь, но в питоне такое есть!

                                          return ({
                                          "foo" : 12,
                                          "bar" : 14
                                          })
                                          Ответить
                                          • это дикт

                                            ну и нахуй нам тупол тадада?
                                            Ответить
                                  • Разнообразные типы данных нужны для двух вещей

                                    * для пифоманса
                                    * для статического анализа кода

                                    Если ничего этого тебе не нужно, то и типы плодить не нужно.
                                    Ответить
                                    • А вообще я за Остерхаута (ну и за TCL, само собой)

                                      https://en.wikipedia.org/wiki/Ousterhout%27s_dichotomy

                                      Он очень хорошо объяснил зачем нужно скриптоговно, и почему из скриптоговна не нужно делать серьезный язык
                                      Ответить
                                      • взгляд из 90х когда статически типизированные языки требовали изъебов чтобы описать какой-то тип, а скриптовые языки писали в notepad++ и файлы по ftp загружали на сервер

                                        сейчас динамически типизированный js выигрывает от мономорфизации по пирформансу и его можно интероперировать с типизированным тс или пихнуть в микросервис и работать по протоколу, да и сам по себе он типизируется аннотациями

                                        по-моему сейчас единственное что имеет знаение при выборе языка - это используется ли он сейчас в экосистеме и знает ли его команда

                                        пытаться управлять сложностью с помощью выбора языка это 90е какие-то

                                        да и разница между компиляцией и интерпретацией сейчас размылась из-за jit
                                        Ответить
                                        • >сейчас динамически типизированный js выигрывает

                                          Чтобы понять, что это не так, достаточно мысленно сравнить работу с целыми числами в С++ и в JS, где они представлены как floating point.

                                          Или вспомнить сколько тактов процессора занимает удаление стурктуры со стека (изменение значения указателя на стек) и удаление объекта из кучи через GC.

                                          >да и разница между компиляцией и интерпретацией сейчас размылась из-за jit

                                          А это правда, хотя JIT есть далеко не в любой скриптухе.
                                          Ответить
                                          • >Чтобы понять, что это не так

                                            js выигрывает не у плюсов а у чисто интерпретированного js

                                            я хочу сказать что когда формулировали дихотомию, были условно компилируемые языки типа джавы которая конпилируется и на которой хуй что опишешь меньше чем тысячей строк и условно интерпретируемый tcl который страшно медленный и без типов но на котором опишешь что угодно

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

                                              Я согласен, что ситуация изменилась , и границы размылись, но на это размытие была потрачена уйма времени.

                                              Люди начали писать большие сложные системы на япах, для них не предназначенных, и начали вдруг ахуевать от неудобств, и теперь завозят тайпхинты в питон, компиляторы TS в JS, и прочие KittensPHP.

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

                                                в 2000 нельзя было сказать "парни, попуститесь, всего через 11 лет будет прекрасный язык котлин", пришлось писать на питоне или на джаве, что заняло бы в несколько раз больше времени

                                                и это привело нас к тайпхинтам и hack
                                                Ответить
                                    • Мне нужно и первое, и второе, потому что не всегда можно сделать С++ вставку с ассемблерной вставкой.
                                      Ответить
                                      • тогда возьми koltin, java или c#.

                                        зачем тебе скриптушня?
                                        Ответить
                                        • Потому что когда я установлю Линукс на флешку, мне захочется написать программу.
                                          Ответить
                                          • Почему не на с++?

                                            В общем наша с Остерхаутом мысля в том, что скриптушня нужна чтобы писать небольшие тупые скрипты.

                                            Потому там не должно быть много структур, не должно быть стат типизации, и прочих сложностей.

                                            Хочешь серьезного программирования -- бери другой изык.

                                            И мне всегда немного смешно, когда питонобляди выбирают там взять кортеж или словарь , и говорят "кортеж быстрее" или "а зато для словаря у нас есть typed dicts, и мы можем статически проверить тип поля"

                                            Если вас все это ебет, то нахуй вам скриптушня-то
                                            Ответить
                                              • > When Coding for Trading, optimization is heavily valued, and coding for performance needs to become a second nature.
                                                > It is for this reason, majority of Financial Trading systems are written in C, C++, Python or Java.

                                                Он идиот?
                                                Ответить
                                                • В статье про оптимизацию питоньих объектов — ня слова про '__slots__'. Идиот.
                                                  Ответить
                                                  • Код на питоне лучше всего оптимизируется переписыванием на Си.
                                                    Ответить
                                                  • Интересня. Это чтобы сделать фиксированный список свойств, как при статической типизации?
                                                    Ответить
                                                    • Да.
                                                      Обычные объекты в Python содержат внутри себя словарь '__dict__', который хранит все свойства инстанса. Это позволяет, няпример, добавлять свойства динямически:
                                                      class X:
                                                          def __init__(self, x):
                                                              self.a = x
                                                      
                                                      
                                                      x = X(16)
                                                      print(x.a)  # 16
                                                      
                                                      
                                                      print(x.b)
                                                      Traceback (most recent call last):
                                                        File "<stdin>", line 1, in <module>
                                                      AttributeError: 'X' object has no attribute 'b'
                                                      
                                                      
                                                      x.b = 42
                                                      print(x.b)  # 42

                                                      За это, как ты понимаешь, приходится платить медленным доступом (каждый доступ к атрибуту — это поиск в словаре), и приличным увеличением потребления памяти: словарь, приклеивающийся к каждому инстансу, это тяжело.

                                                      __slots__ же ограничивает возможные атрибуты инстанса, сильно экономя память и прилично (по няпроверенным данным — ня 15-30%) ускоряя доступ к свойствам. За это приходится платить нявозможностью добавлять свойства в динямике:
                                                      >>> class Y:
                                                      ...     __slots__ = ('a', 'b')
                                                      ...
                                                      >>> y = Y()
                                                      >>> y.a = 1
                                                      >>> y.b = 2
                                                      >>> y.c = 3
                                                      Traceback (most recent call last):
                                                        File "<stdin>", line 1, in <module>
                                                      AttributeError: 'Y' object has no attribute 'c'

                                                      Также, что очевидня, свойства '__dict__' у слот-машиныобъектов ня создаётся.
                                                      Ответить
                                                      • Про это написино в книжке "Effective Python".
                                                        Вообшще полезная книжка, и спиздить её легко: она много где валяется
                                                        Ответить
                                            • Java сосёт, т.к. Oracle – злые капиталисты, С# отпадает по этой же причине. На JS я не буду писать, т.к. он для хипстеров, а С++... Не хочу его осквернять программами, которые я обычно пишу на питоне.

                                              А если серьёзно, то ты прав, да. Что угодно можно написать на крестах, там есть все инструменты для удобного питушения.

                                              Питон лично я использую только для скриптов вида «скролль эту страничку, потом сохрани её, чтобы другой скрипт распарсил её рагуляркой» и всякие сайтики.

                                              Я думаю, что уровень питона как ЯП более чем достаточен, чтобы писать бизнес-логику и всякие формочки, а вот для всяких сложных вычислений всегда можно дописать модуль на крестах, с типизацией, пирфомансом... Как-то так.
                                              Ответить
                                              • openjdk же есть)

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

                                                  Для меня на данный момент самый прикольный ЯП, на котором ещё и заработать можно – это С++.

                                                  На втором месте питон с его возможностями в вебдеве.
                                                  Ответить
                                                  • ну тогда .net core, он MIT

                                                    c# лишен недостатков jvm

                                                    на нем можно писать и логику, и веб)
                                                    Ответить
                                                    • Но он же от мелкомягких!

                                                      С одной стороны, мне вроде бы как нравится. С другой стороны:

                                                      Также опубликован пятый предварительный выпуск открытой платформы .NET Core 3.0, функциональность которой приближена к .NET Framework 4.8 благодаря включению в состав открытых в прошлом году компонентов Windows Forms, WPF и Entity Framework 6.

                                                      А если бы не захотели открывать, то что, лапу сосать? Такое мне не по нраву, не люблю Vendor Lock.

                                                      В принципе, кресты меня более чем устраивают, когда я пишу что-нибудь сурьёзное. Они с питоном друг друга хорошо дополняют 🙂
                                                      Ответить
                                                      • так не используй winforms, WPF и EF:)

                                                        Кресты это отлично, но для написания логики это немного экстрим. Впрочем, ничего суперстрашного в том тоже нет
                                                        Ответить
                                                    • Вроде бы всего 5 месяцев назад было!
                                                      Что же произошло? Не такой большой промежуток времени, чтобы всё осознать (или я слишком стар стал, и у меня мало что меняется).
                                                      Ответить
                                                • >> openjdk же есть

                                                  Тут вообще багор. Раньше «JRE» и «JDK» можно было просто так скачать. Теперь там нужно указывать е-мейл, чтобы получить ссылку для скачивания. Если е-мейл принадлежит организации, «Оракл» её завалит письмами с предложениями купить «JRE».

                                                  Ну или можно скачать «OpenJDK» без регистрации, о чём не все знают.
                                                  Ответить
                              • честно говоря, кортеж без именованных полей особо ничем не лучше
                                Ответить
                                • кстати, в питоне есть еще и named tuples: кортеж с именованными полями
                                  Ответить
                          • > это типа заебись

                            Вполне. Этот мультиразврат обычно юзают в каких-то технических моментах в духе итераторов (key, value) или обработки ошибок (result, error).
                            Ответить
            • да, в луа заебись
              и без ненужной сущности
              Ответить

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

Семь раз отмерь — один отрежь, guest!

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


    8