Rodegast
Никогда не используй оператор := Это не по феншую.
У меня он вообще не срабатывает.
>>> if x := 1:
File "<stdin>", line 1
if x := 1:
^
SyntaxError: invalid syntax
>>>
При этом у меня не самый старый питон. То есть обновлять питон ради одной строчки в одном скрипте я бы не стал.
xam1816, представь просто, что твой скрипт попадает в локальную сеть, про которую ты даже не знаешь, что она вообще существует (таких сетей примерно десятки тысяч), где стоит питон среднего возраста там на пятидесяти компьютерах примерно. Ты думаешь, все бросятся обновлять эту сеть? Не, они просто выкинут твой скрипт и возьмут другой. Может быть, просто перепишут твой скрипт в более генерализованную форму, а может, просто скажут “а что нам возиться сейчас с этим? у нас сейчас на это времени нет, нам сейчас надо какую-нибудь бактериологическую или геологическую хрень считать, так что давайте другой скрипт возьмём”. И всё. Твой скрипт вот так и помрёт. Там не подошёл, тут не подошёл - и всё, про него забыли. А работает везде в итоге что-то другое, более простое и так далее. Вот то, что запускается везде, вот оно и будет жить. Посмотри на Linux, которая на любом пылесосе, телевизоре, холодильнике сейчас стоит. А Windows там нет, хотя они бы очень хотели просунуть её где только можно, даже смартфон пытались сделать свой. Linux везде живёт, потому что она везде ставится, ко всему адаптируется легко. Это не говоря о том, что она у всех в кармане сейчас находится в виде Android, а они даже не знают об этом, что это Linux. Питон точно так же распространился, его легко ставить везде, он везде подходит, для него ничего не надо. Чем проще, тем лучше.
Что касается самого оператора присваивания. В питон он такой “неудобный” изначально не потому, что про него не знали и поэтому не додумались его реализовать. Питон как раз делали по образу и подобию сишника (в котором этот оператор был изначально) только с ООП-инструментами и расширениями. И добавили его сейчас не потому, что его там не было и его забыли сделать, а потому, что он всё-таки иногда кому-то нужен. В сишнике тоже, знаешь, оператор goto не стали вырезать точно по той же причине. Не потому, что его удобно там использовать и так далее, а потому, что иногда каким-то профи он очень нужен и они его используют при этом, очень хорошо себе представляя, какой вред он наносит, когда он испольуется в повседневной разработке.
Сделай import this и перечитай все правила
Вот там есть правило
Flat is better than nested.
Умный код - это не тот, в котором мало строчек. Умный код - это тот, который после его написания легко дописывать дальше. Соответственно, какое-то присваивание отдельное можно легко заменить на вызов функции.
Вот пример, как дописывается код
Было
Стало
def f(x):
return x ** 2
x = f(2)
if x > 3:
print(x)
Особенность дописывания кода здесь в том, что весь оператор if вообще никак не затрагивается. Если он проверен и гарантированно работает, то ничто его не нарушает. Он как работал, так и работает дальше. Его не надо снова проверять, он не менялся.
И вот пример, как дописывается код с “умными” вставками
Было
if (x := 4) > 3:
print(x)
Стало
def f(x):
return x ** 2
if (x := f(2)) > 3:
print(x)
Оператор if поменялся. Теперь его снова надо проверять и подтверждать его правильную работу.
Теперь умножь эти все операторы if, for, while и так далее на тысячу. В коде их далеко не один обычно. В итоге ты будешь сидеть и проверять тысячу операторов, которые ты уже проверял раньше, повторно. Когда ты устанешь их проверять повторно уже десятый раз, ты перестанешь их проверять. Когда ты перестанешь их проверять, ты станешь наугад писать их и думать про них чисто теоретически, что они продолжают правильно работать после твоих изменений. Ну и, таким образом, у тебя в коде начнут появляться ошибки, про которые ты даже знать не будешь, которых изначально там не было.
Вот что такое умный код. Это такой код, который можно разрабатывать дальше в любом направлении, но который из-за этой продолжающейся разработки не нужно по сто раз перепроверять. И для этого специальные приёмы записи кода существуют.
А вот эти вложенные “умные” однострочники - это называется
го
вно
код
.
Ты бы книжки уже начал бы читать какие-нибудь. В них всё это расписано вдоль и поперёк.
tags: inline code