Форум сайта python.su
Может, уже где обсуждалось, я ж не читатель :-)
Сразу скажу, что вообще питон мне всё-таки нравится, но некоторые вещи кажутся мне очень странными.
Область видимости переменных. Почему просто было не сделать “снизу вверх”, как в “обычных” языках? Частая глобальная переменная - в каждой функции пиши global. Или передавай её как параметер. Зачем эти сложности на пустом месте?
Почему бы не сделать вложенных функций? Я не имею в виду lambda, я имею в виду функции строк на 10 с нормальной логикой, несколькими return, и доступом к переменным вышележащей функции.
Зачем при написании метода класса всегда указывать self? Понятно, что “объектная ориентированность реализована так”, но код-то зачем этим забивать? В “других языках” интерпретатор с таким отлично справляется без пихания self на каждый чих.
Почему bytes неизменяем? Что мешало сделать работающим что-то вроде b = 0x10?
В третьей версии серьёзно меняли синтаксис… Одно из главнейших отличий (не главное, конечно, но пожалуй, именно это больше всего ударило по питоновким проектам), что print - теперь функция. Проделана огромная работа, многое было переписано заново…
А этих очевидных вещей не добавили. Почему?! Был бы вообще лучший язык на свете, а тут во многом остаётся ощущение некоторой недоделанности и временности. Хоть Гвидо и “заморозил изменения синтаксиса”, думаю, меняться язык будет. Уж очень нестабильное состояние его сейчас (3.1).
Сумбурно, конечно, но надо же высказаться и мнения общественного спросить.
Офлайн
В каждом языке есть свои плюсы и минусы. Например - РНР. Простой(и плюс и минус), поддерживает много баз данных(+), есть куяча примеров и реализаций(+). Минуса - простой(ох и много гавнокода на нём написано!), нет(это мое ИМХО) нормальной ИДЕ под него, непонятные и запутанные инклуды.
Офлайн
Ну да… Но я не к тому, чтобы поныть о том, что мне не нравится.
Может, предложения по улучшению где-нибудь централизованно принимаются? Ведь добавь эти вещи - однозначно лучший язык будет.
Офлайн
Из всего вышеперечисленного только self поддерживаю. Остальное - на любителя.
Офлайн
LexanderИ от куда вы предлагаете его брать? Из воздуха?
Из всего вышеперечисленного только self поддерживаю.
Офлайн
то, что вам кажется недоделанностью, другим видится логичными вещами.
есть bytearray - mutable bytes.
что за вложенные функции? )
Офлайн
Область видимости переменных. Почему просто было не сделать “снизу вверх”, как в “обычных” языках? Частая глобальная переменная - в каждой функции пиши global. Или передавай её как параметер. Зачем эти сложности на пустом месте?1. Использование глобальных переменных - частый симптом плохого дизайна. Требуется редко.
Почему бы не сделать вложенных функций? Я не имею в виду lambda, я имею в виду функции строк на 10 с нормальной логикой, несколькими return, и доступом к переменным вышележащей функции.Вы мне не поверите.
Ещё раз - функция должна оперировать только теми переменными, которые ей дали явно. Тогда количество side-effects меньше.In Python 2, you can work around this by placing values you want to change in a list ordef countdown(start):
n = start
def display():
print('T-minus %d' % n)
def decrement():
n -= 1 # Fails in Python 2
while n > 0:
display()
decrement()
dictionary. In Python 3, you can declare n as nonlocal as follows:The nonlocal declaration does not bind a name to local variables defined inside arbi-def countdown(start):
n = start
def display():
print('T-minus %d' % n)
def decrement():
nonlocal n # Bind to outer n (Python 3 only)
n -= 1
while n > 0:
display()
decrement()
trary functions further down on the current call-stack (that is, dynamic scope). So, if
you’re coming to Python from Perl, nonlocal is not the same as declaring a Perl local
variable.
Зачем при написании метода класса всегда указывать self? Понятно, что “объектная ориентированность реализована так”, но код-то зачем этим забивать? В “других языках” интерпретатор с таким отлично справляется без пихания self на каждый чих.Дабы отличать обычные методы от методов класса и статических методов. А так же для того, что бы отличать локальные переменные от атрибутов класса.
Почему bytes неизменяем? Что мешало сделать работающим что-то вроде b = 0x10?Я, наверное, что-то упустил, но в питоне нет встроенного типа bytes.
В третьей версии серьёзно меняли синтаксис… Одно из главнейших отличий (не главное, конечно, но пожалуй, именно это больше всего ударило по питоновким проектам), что print - теперь функция. Проделана огромная работа, многое было переписано заново…Начиная с версии 2.5, кажется, можно было использовать print как функцию. Но я вас обрадую - это не главное изменнение.
А этих очевидных вещей не добавили. Почему?! Был бы вообще лучший язык на свете, а тт во многом остаётся ощущение некоторой недоделанности и временности.Потому что эти вещи даже близко не очевидны. Потому что python - не PHP. Потому что вы не разбираясь принялись выносить суждения.
Хоть Гвидо и “заморозил изменения синтаксиса”, думаю, меняться язык будет. Уж очень нестабильное состояние его сейчас (3.1).Да, он будет меняться. И это замечательно.
Офлайн
вспоминается анекдот “”“чукча не читатель , чукча писатель”“”
Отредактировано (Ноя. 5, 2009 17:25:00)
Офлайн
ZZZЗачем магия. Есть перечень свойств и методов класса, оттуда их брать. Речь идет о том, чтобы сократить запись обращения к ним внутри класса. Вот именно в этом я и поддерживаю автора. Но только в этом :)
И от куда вы предлагаете его брать? Из воздуха?
Не надо магии.
Офлайн
LexanderЧитаем внимательно:
Зачем магия. Есть перечень свойств и методов класса, оттуда их брать. Речь идет о том, чтобы сократить запись обращения к ним внутри класса.
FerromanP.S.
Дабы отличать обычные методы от методов класса и статических методов. А так же для того, что бы отличать локальные переменные от атрибутов класса.
И это ещё не все причины.
Отредактировано (Ноя. 5, 2009 19:56:11)
Офлайн