>>> [4][0]
4
>>> [4][0.0]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: list indices must be integers, not float
>>> {0:4}[0]
4
>>> {0:4}[0.0]
4
Какой впечатлительный попался O_o. А чего он ожидал?
Да уж понятно, что питонисты о тех, кто будет ВЫНУЖДЕН учить их язык думать не желают. Только тогда бы уж лучше вас вообще не было. А то что ни приложение, то используется ваш питон для плугинов. Хочешь не хочешь, а ПРИХОДИТСЯ учить это ваше изобретение.
И можете не волноваться на мой счёт, но только не обижайтесь, если я обругаю ваш язык на форуме.
Твои фобии всем побоку, говорю же. А если твой внутриголовной парсер не может в синтаксис без скобок, то тебе должно быть трудно не только с питоном, но и вообще по жизни.
Ваш язык пролез во все программы, он больше не ваша единоличная песочница. И по этому вы должны думать в том числе и о тех, у кого парсер безскобочный синтаксис не умеет.
Лично мне хватает и выискивания всяких мелких опечаток, что бы добавлять к этому ещё и подсчитывание табуляции. Но приходится к сожалению.
Никто никому ничего не должен. Не нравится язык, используй другой, что бы ты там не говорил, никто не заставляет. Программа работает только с плагинами на питоне? Используй другую программу или вообще свою пиши. Или меняй профессию.
Из-за обратной совместимости так. В старых версиях True и False были просто алиасами для 1 и 0.
Ну и местами оно даже удобно. Можно делать вещи типа num_blocked_users = sum(user.is_blocked() for user in users). Плюс идейная совместимость с Си и т. д. Поэтому ломать нынешнее поведение смысла нет.
Я не программист, я фрезеровщик и по этому меня нельзя упрекать за ни какое знание языка и тулкитов. Ну и мне надо порой сделать элементы управления ЧПУ, какое нибудь окощечко с кнопкой и индикатором, или калькулятор рабочего времени. Иногда просто вставить метку что типа программа пошла по этой ветке исполнения.
С другими языками я могу спокойно втюхнуть в чужой код что мне надо, не особо разбираясь в синтаксисе и правилах языка. Ну конечно ясно. что рвать конструкции нельзя, но для этого знать весь язык не обязательно. А что будет с программой на питоне если я туда влезу и нарушу форматирование? К чему там прилепится то что я туда всунул? Честно говоря я не пробовал менять код на питоне, пока только смотрел программы и приценивался, но одно то, что помимо некоторого распутывания придётся считать ещё и форматирование мне не не удобно, и чую, что придётся учить язык подробно, больше , чем мне это необходимо при работе с другими языками.
И я считаю, что если вы добились того, что ваш язык везде используется для написания плугинов, то вы и получили связанные с этим обязанности.
Питон больше не ваша частная нора, в которой вы могли бы делать всё что захотите. Вы должны считаться и с теми, кто использует ваш язык постольку поскольку его используют другие.
И я считаю, что если вы добились того, что ваш язык везде используется для написания плугинов, то вы и получили связанные с этим обязанности.
Кто мы-то, ёпт? Ты один здесь сидишь жалуешься, мы для твоего софта ничего не добивались. Не нравится - обратись к поставщику, пускай встроит туда JavaScript, щас модно.
С пробелами проблем не возникает в любом редакторе приличнее notepad.exe.
А так язык всё же ориентирован на тех, кто пишет код сам, а не копипастит его со stack overflow, а если и копипастит, то хотя бы понимает что копипастит.
Невозможно сделать инструмент который будет одинаково удобен и новичкам, и профессионалам, и тем кто вообще мимо проходил.
Нет. Он настолько простой, что ему пытаются приписать какие-то сложности, как сделал ты, например. У меня для тебя еще вариант есть, полегче, ну и чтоб не шланговалось:
Что по твоему должно вывестись?
def foo(a):
def bar():
pass
bar.value = a
return bar
print foo(1).value == foo(2).value
Меня как раз += убил. Получается, строгой гарантии безопасности исключений в питоне для встроенных операций нет?
В питоне нет такого явного понятия и нет никаких встроенных операций. Есть стандартныые методы у объектов реализующие некий интерфейс и они обычно у стандартных структур данных имеют такую гарантию.
Операция «+=» раскладывается на две - мутабельный __iadd__() над списком и мутабельный __setitem__() над таплом, каждая из них ES, но вместе они таковыми не являются. В этом месте поведение аналогично другим ЯП.
Естественно, последний фейлится т.к. такого метода у тапла нет, а конструктор тапла не хочет/может проверять что его строят из мутабельных типов ибо архитектура питона слишком глупая и этого сделать не позволяет. Например, в питоне нет понятия константного (немутабельный) объекта или ссылки на него. В принципе это недостаток дизайна языка, а не баг реализации.
Не совсем понимаю. __iadd__() это аналог +=? Тогда вполне логично, что он выполняется над списком и приводит к такому результату. Но зачем после выполнения += вызывать __setitem__?
Получается какой-то код вроде a.__setitem__(0, (a[0] += [2])) ?
Догнал что ты имел ввиду. Да, пожалуй можно было бы добавить какой-нибудь __real_iadd__, который на уровне интерфейса гарантирует, что возвращаемое значение это исходный объект.
Невозможно сделать инструмент который будет одинаково удобен и новичкам, и профессионалам, и тем кто вообще мимо проходил.
Так дело том, что он становится стандартным языком для плугинов и расщирений. при этом все говорят, тебе надо. ты и делай. я понимаю такую позицию, но по факту то пишут на языке максимально недружественным к изменению кода. Ну вот надо скажем мне чтобы приложение на заканчивало работу при закрытии окна а ожидало команду на его восстановление. Задача и без того для меня за пределами опыта и знаний, так тут ещё даже если я смогу понять как вписать цикл, то мне ещё и переформатировать код под него придётся.
А это значтит придётся вникать не только в программирование окон, а вообще полностью во всю работу прриложения. И при чём до мельчайших деталей, иначе как мне понять где сколько табуляции сунуть. Ну или пусть я даже пойму, где и сколько, но ведь это сколько работы которой я бы мог не делать?! И енобходимость которой обосновывается только тем. что у языка такой синтаксис.
Хватит с меня того. что в неформатированном XML потихоньку перестаёшь понимать, кто, где и сто вообще происходит и делается.
тоже вот приходится брать и форматировать.
Но там хотябы это не навязывают и можно ораничится только тем, чтобы было читаемо, хотя бы сейчас и мне.
Ты просто ленивая жопа. Базовый синтаксис и конструкции можно усвоить за 10 минут, ты только здесь уже больше наныл. Тот кто хочет ищет возможность, нехотящий — причину, такие дела.
Об этом сказано в документации. Выражение def генерирует новую функцию, а одинаковость функций определяется их адресом. Или ты хотел чтобы функции сравнивались по байт-коду, скопу и прочему?
Эх, и это говорит адепт языка в котором «1» + 2 == 3? Ты обычный тролль :(
Я процитировал не «dzen of perl», если что. И да, ad hominem выдает в тебе неспособность посмотреть правде в глаза. В правде нет ничего унижающего питон: да, его синтаксис чище, проще perl'a. Простой синтаксис, сложная семантика. Мы уже обсуждали это на примере типов данных.