Pull to refresh

Comments 98

Читать PEP-8, быстро!


А отстутствие отступов в примерах сразу после заявлений о важности отступов — это пять. Пост хоть кто-нибудь вычитывал перед публикацией?

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

Можно странный вопрос? Я знаю, что Питон популярный ЯП, но… зачем он нужен если есть Си/С++ на котором можно написать всё?
Это некая концептуальная проблема для меня, я ставил Питон, поигрался и бросил не найдя применения.
Можете привести примеры того, что легко-быстро-удобно делается на Питоне и тяжело и громоздко на Си?
легко-быстро-удобно делается на Питоне

Абсолютно всё.


тяжело и громоздко на Си

Абсолютно всё.


Ручное управление памятью, постоянные выходы за пределы массива и соответствующие сегфолты, утечки памяти, наоборот double free, возня с указателями, забываемые проверки на null, #define true false — вы серьёзно считаете это всё удобным?

Зато те задачи, где необходимо ручное управление памятью, очень удобно программировать на Си.

Для «низкоуровневых» задач с недавних пор есть Rust, так что C/C++ теперь не подходят вообще ни для чего, кроме поддержки старого кода.)

Ну, это уже отдельный вопрос. Хотя тоже имеет место быть.

Можно странный вопрос? Я знаю, что Раст популярный ЯП, но… зачем он нужен если есть Си/С++ на котором можно написать всё?
Это некая концептуальная проблема для меня, я ставил Раст, поигрался и бросил не найдя применения.
Можете привести примеры того, что легко-быстро-удобно делается на Расте и тяжело и громоздко на Си?

Ответите?
Так то же самое:

>Ручное управление памятью, постоянные выходы за пределы массива и соответствующие сегфолты, утечки памяти, наоборот double free, возня с указателями, забываемые проверки на null, #define true false — вы серьёзно считаете это всё удобным?

И даже что-то из указанного вами ниже списка есть, но как непрофессионал от точного перечисления воздержусь. (Если спецы по Rust мимо пробегать будут, это пусть они расскажут)

А вообще пост не про Си и не про Rust так-то, а мы тут оффтопим.)
UFO just landed and posted this here

Лучше вы расскажите, как вам Heartbleed и ошибки в SMB?

UFO just landed and posted this here
Вот тут я не понял при чем тут старая проблема связаная с отсутствием необходимой проверки границ

При том, что такие ошибки в C/C++ — обычное дело (блог PVS-Studio читаете?), и известная ошибка в SMB, найденная в 2017-м, была вовсе не в Python-коде.


На RAST пишется все без ошибок и работает безукоризненно?

Да. Если точнее, то в unsafe-коде накосячить таки можно, но его очень-очень мало, unsafe-код достаточно один раз тщательно проверить и вычитать, а весь остальной код будет автоматически безопасным. Многие программы можно написать вообще без unsafe-кода. В то время как в C/C++ весь код автоматически unsafe, и даже дисциплина не всегда помогает, и от подобных ошибок спасёт разве что PVS-Studio за много тысяч денег.


Rast уже заменил C/C++

Я такого не говорил. Rust в ближайшие десятки лет точно не заменит C/C++, потому что есть куча проектов, которые уже написаны на C/C++ и которые никто в здравом уме не будет переписывать на Rust. И да, в этих проектах постоянно находят ошибки, которые на Rust невозможны — список CVE в ядре Linux, думаю, сами нагуглите.

UFO just landed and posted this here
А как трактовать фразу что для низкоуровневых задач есть Rust и C/C++ уже ни для чего не проходят?

Если для вас это то же самое, что «уже заменил», то мне остаётся только посочувствовать вашей логике. То, что для низкоуровневых задач есть Rust, никак не отменяет того, что в том же линуксе бежать срочно заменять Си на Rust никто в здравом уме не будет.


вот например

Уязвимости в ядре и стандартной библиотеке возможны у любого языка программирования, так как где-то там внизу неизбежно есть unsafe-слой, без которого сделать что-либо просто невозможно. Тем не менее, баги и уязвимости в стандартной библиотеке выловят и исправят один раз, и всё на их базе будет безопасным, а в этих ваших C/C++ каждый проект нужно проверять индивидуально (сколько раз мне ещё про блог PVS-Studio нужно напомнить?). Так что это ваше «вот например» неуместно.


топить бездумно за Rust, указывая на ошибки кода, написанного на том же C++, это глупо.

Ошибки в коде почти каждого C++ проекта — вот что на самом деле глупо. Ошибки в стандартной библиотеке Rust найдут и исправят, а PVS-Studio на каждый существующий C++ проект никто накатывать не будет.


Точнее поговорит уже новое поколение программистов

Это новое поколение должно откуда-то взяться, поэтому говорить про Rust нужно уже сейчас. Чем я и занимаюсь. Мой опыт не имеет значения: есть много куда более опытных C++ программистов, переходящих на Rust и вполне довольных; думаю, без проблем нагуглите их блоги, если захотите. (Неосиляторы, которым не понравился спасающий от ошибок borrow checker, к сожалению, тоже есть и тоже гуглятся.)

UFO just landed and posted this here
проблемах других языков, о которых вы знаете, судя по всему, из блога PVS-Studio и больше никак

Этого более чем достаточно, чтобы всячески избегать C/C++. Я, по-вашему, должен закрывать глаза на лёгкую возможность допустить уязвимость по невнимательности? И вы, видимо, закрываете? Или вы надеетесь, что, имея 20 лет опыта, никогда не допустите мелкую опечатку по невнимательности, которая однажды случайно приведёт к CVE? Так тот же блог PVS-Studio наглядно демонстрирует, что это так не работает.


Хотите топить за Rust, так нет проблем, берете проблемный код на плюсах и показываете как круто переписать его на Rust.

На Хабре есть целый хаб про Rust — в том числе с переводами постов от Mozilla, которые переписывают Firefox на Rust и радуются, как всё прекрасно. Вперёд. Всё уже написано до меня. Я лишь напоминаю о существовании языка.


Редко получается проект без ошибок.

И на Rust логические ошибки или ошибки в unsafe-коде никто не отменял, да. Но вероятность допустить ошибку на Rust намного меньше, чем в том же C/C++. Раз вы уже взглянули на Rust, думаю, у меня нет необходимости читать лекции о том, как Rust защищает от ошибок. Опять же, есть хаб на Хабре, где всё уже рассказано до меня.

Мир, к сожалению, не ограничивается компьютерами с традиционными x86/AMD64 процессорами. Попробуйте что-то написать на расте, например, для процессора 1892вм7я, и сделать так, чтобы ваше творение заработало.

К сожалению, вы правы. Уверен, со временем Rust повзрослеет и будет без проблем работать на любой микроволновке. Тем не менее, на тех же x86, arm и mips Rust работает уже сейчас.

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

Вы не в здравом уме и доводите всё до абсурда. С таким отношением проекты обречены независимо от языка программирования. Ни в одном своём комментарии я не предлагал бросать все дела и срочно переписывать всё на Rust.

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

И сразу видно, что в гадание по аватарке комментариям вы не очень умеете. Я программирую на питоне десять лет, из них четыре зарабатываю, и даже на гитхабе у меня немного репозиториев валяется (в том числе на Rust и, внезапно, C++).


Зато по вам сразу видно, что у вас программирование уж точно не является ни профессиональной деятельностью, ни хобби, иначе бы вы, имея хотя бы поверхностное представление об основах C++ и Python (ну и Rust заодно), понимали бы, что в моих комментариях всё написано абсолютно правильно и правдиво.

Уорд Каннингем написал такое эссе: Key Language Feature. Оно даёт ответы на вопросы, подобные вашему.

Кратко пробежимся по списку: higher order functions, lambda expressions, exception handling, resumable exceptions, closures, first-class types, causally reflective environment, introspection and reflection, modules, automatic type inference − это всё есть в Python искаропки, но в C и C++ нужно писать много кода, чтобы реализовать все эти фичи.

Мета-вопрос: почему вы этого не понимаете? Тоже есть ответ: Пол Грэм, Blub Paradox (по-русски).
Да, там как раз очень понятно разложено ))). Спасибо!
«когда он смотрит… вверх, он не осознает, что смотрит вверх. То, что он видит, — это просто „странные“ языки. Возможно, он считает их одинаковыми с Блабом по мощности, но со всяческими сложными штучками. Блаба для нашего программиста вполне достаточно, так как он думает на Блабе.»
Я думаю на Си. )
Кстати помнится вполне освоил Билдер ради создания интерфейсов, но в научной среде GUI редко нужны — отсюда и такое программирование.
— — —
И я уже собирался броситься в пучину Lisp.
ru.wikipedia.org/wiki/Десятое_правило_Гринспена
UFO just landed and posted this here
а их в питоне нет

Они есть и так, просто неявно. А с static type checking, который активно пропагандируется в последних версиях питона типы есть и явно.
Плюс, если говорить об инфраструктуре numpy/pandas, например, то там ещё начинают играть роль сишные типы из numpy.
UFO just landed and posted this here
Их в классическом питоне нет.

Они есть. Без использования static type checking они есть у объектов, но не у переменных, а с использованием — они есть и у переменных тоже.
UFO just landed and posted this here
> Типы — это статически известные метки для тайпчекера.

В расте вообще можно написать только дефиницию функции и все типы внутри раст сам додумает. При этом у раста одна из самых сильных систем типов.

Вы можете точно говорить, что вам не нравится в системе типов питона? (я, человек работавший с питоном и с его типами, по дефалту принимаю фразу «типов в питоне нет» за опечатку)
UFO just landed and posted this here

А можете привести пример такой сильной системы типов, в которой вывод неразрешим именно потому, что это математически не возможно, а не потому, что там просто не сделали такого?


Какое отношение явная/неявная типизация и глобальный вывод типов имеет к обсуждаемому разговору?

Типы — это статически известные метки для тайпчекера.

Статически известные это


String str = String.new()

?

UFO just landed and posted this here
С каких это пор динамическая типизация − это «нет типов»? Нет типов в ассемблерах, в BCPL. Почитайте хотя бы вики для приличия: “Python uses duck typing and has typed objects but untyped variable names… Despite being dynamically typed, Python is strongly typed…”.
UFO just landed and posted this here
Ну давайте, давайте ссылаться на эту книгу. Я её раньше не читал, но теперь вот с удовольствием открыл. Но что-то не могу я в ней найти такого утверждения, что именно статический тайпчекер делает язык типизированным. Наоборот, типизированный язык определяется как
some attempt is made, either at compile time or at run-time, to check shape-consistency

У Python с этим всё в порядке:

>>> 1 + "a"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'

Как вообще это получается, по-вашему: ошибка типа есть, а типов нет? Где тут логика?
UFO just landed and posted this here
Вот более полная цитата:
1.1 What is a type system
A useful—though rough—distinction divides the world of programming languages into two parts:
  • Untyped — programs simply execute flat out; there is no attempt to check “consistency of shapes”
  • Typed — some attempt is made, either at compile time or at run-time, to check shape-consistency

Но это, в общем-то, частности. Я не понимаю вашей логики в целом. Если в Python нет типов, то как CPython отличает строку от числа? Что делает встроенная функция type?

Если в Python нет типов, значит, и классов там нет? Классы − это ведь частный случай типизации. Или если класс сконструирован в рантайме, то он не считается классом?
UFO just landed and posted this here
Лет 20 назад я так же реагировал на взрывную популярность Delphi. Мол, зачем оно в принципе нужно, если есть C/C++?
Однако через какое-то время пришлось признать, что очень многое в Delphi реализовано не в пример удобней (не обязательно лучше, именно удобней).
Правда, Delphi сейчас где-то на задворках, а С++ по прежнему где-то в топе, но это к теме удобства не особо относится.
Возможно, Питон постигнет та же участь, хех.
Ну а пока имеем то, что имеем — многие вещи на Питоне пишутся сильно проще (быстрее, удобнее, итд...).
Python можно запустить хоть на чем, Windows, Linux, Raspberry Pi, роутер. Причем, все работает без переписывания, без возни с настройками. Просто ставишь сам Питон и запускаешь свою программу.
А чтобы на всем этом собрать и запустить C++ программу, нужно обрести много гемороя с компиляторами, библиотеками.
У Python есть Django/Flask для web-приложений. И запустить его опять же можно хоть где.
Есть такие штуки как Amazon Lambda. Python там поддерживается, С++ нет.
Python можно запустить хоть на чем, Windows, Linux, Raspberry Pi, роутер.

Прошу прощения, рука дрогнула.
После установки Питона на роутер, весьма вероятно, он перестанет маршрутизировать и начнет заниматься только выполнением вашей программы на Питоне.

если это нормальный роутер с хардверным управлением пакетами, то все будет нормально :)

Тогда надо начинать с "предположим, у нас есть бесконечное количество памяти, дискового пространства и вычислительных ядер".
Реальность, увы, гораздо менее щедра.

Допустим, такая была реальная задача: подключиться раз в 10 минут к сайту, сделать GET запрос, найти с помощью RegExp определенное число в коде страницы, сохранить это число в файл.
Не думаю, что это хоть как-то затормозит роутер.
Понятно, что ставить боевой web-сервер на тысячи пользователей на роутер не стоит даже и пытаться.

И ради этой задачи надо на роутер поставить Питон? Не статически скомпилированный бинарник из 100-строчной программы на С? Не luajit с необходимым количеством библиотек? В конце концов, не shell-скрипт, для которого на роутере уже все есть?

А почему нет? Есть задача, есть платформа, работающая 24/7.

А что туда qemu не поставить, и поверх нее Ubuntu с иксами?
Мне кажется, что единственным аргументом за установку Питона на роутер для решения этой конкретной задачи является умение решать эту задачу Питоном. В милом моему сердцу мире разработки для низкопроизводительных устройств с ограниченными ресурсами, принято подбирать решение, наиболее подходящее железу, и под эту задачу подбирать разработчика, а не наоборот. В мире больших серверов и ПО для массового обслуживания все наоборот, доля стоимости железа стремится к нулю, поэтому Питон с его порогом вхождения более чем востребован.

Как я уже сказал, один и тот же код на Python будет работать одинаково, без переписывания и на роутере, и на VPSке, и под Windows в вашей любимой IDE.

Ну это во-первых не так, это приложение явно отъест существенно большую часть наличных ресурсов роутера, чем VPS, а во-вторых, как кроссплатформенностью копеечной задачи, решаемой, повторюсь, вовсе без установки дополнительного ПО на роутер, можно аргументировать установку Питона со всеми его модулями на роутер?
Это оставляя в стороне вопрос, что все эти модули придется скомпилировать с учётом имеющихся на роутере библиотек.

Микротик так умеет :)).
Позволяет в виртуальной машине запустить виртуальный роутер, который будет получать доступ к реальным портам.
Можно запихнуть OpenWRT + ТОР + гейши, настроить и радоваться :)

Это мне напоминает сказку про скорняка и жадного богача. Запихнуть можно, работать будет соответственно имеющимся ресурсам.

Windows лучше исключите из списка, не работает там Python по-нормальному. На этой платформе нет стандартного компилятора C, собрать сишный пакет для официального дистрибутива Python − то ещё приключение, поэтому чаще приходится подставлять костылики: либо «зверь-сиди» с своими суррогатами вместо нормальных PyPI и Virtualenv (Anaconda, ActivePython), либо оверхед в виде MinGW.

Конечно, Wheel-пакеты в своё время немного снизили накал страстей. Но, поскольку Microsoft ради Python за всю историю ни разу не пошевелил и пальцем (“Developers! Developers! Developers!”), для питонистов будет безопасней игнорировать эту платформу.

Из 2019 года: благодаря wheel уже не так плохо.

Python можно запустить хоть на чем, Windows, Linux, Raspberry Pi, роутер. Причем, все работает без переписывания, без возни с настройками

Ошибка. Обычный код аля "1+1" может работать везде, а вот код с библиотеками… Тут сначала нужно решить проблему с pip, который не всегда хорошо ставится. Потом решить проблему с либами, которые не всегда компилятся под винду. Ну и потом уже можно выдохнуть и вспомнить про версии самого питона...

Он нужен тем, кто не может освоить С++
В общем совершенно бесполезный язык.

Для разнообразия отвечу серьезно.


Питон идеален для быстрой аналитической работы. Скрутить rpc-клиент из генератора, выдернуть данные, разобрать в pandas, отрендерить график в mathplotlib, это все. Это классно. Это удобно (jupyter это вообще мечта). Далеко не факт что вы сможете сходу написать аналогичный по эффективности C/C++ код (numpy вылизан до безобразия по эффективности). Вам не надо искать как собрать какой-то пакет — вы берете и работаете.


Да, по факту многие прототипы на python я потом переписываю на чем-то еще. На Go, на rust. Но питон позволяет поиграться с идеей уже сейчас и убедиться что она имеет право на жизнь.

Спасибо! Надо предпринять вторую итерацию.
UFO just landed and posted this here
Разве что человеку, который уже является Haskell-девелопером.
И математикам из академии, переезжающим с Matlab, и разработчикам, влезающим в анализ данных из каких-то прикладных языков, Python тут будет удобнее.
UFO just landed and posted this here
Не так давно коллеге (который в питоне шарит) что-то там надо было распарсить и обработать — за пару часов результатов работы своего скрипта он не дождался. Моё поделие на х-ле отработало за время порядка нескольких минут.

Дерзко предположу, что ваш коллега плохо шарит в питоне. numpy-стек очень хорошо оптимизирован, и правильно написанный код (где всё по максимуму считается через всяческие броадкастинги) должен быть крайне быстрым, сопоставимым по скорости с хорошим кодом на плюсах (ведь там под капотом и MKL, и всяческий SIMD). Поэтому хороший код на питоне и хороший код на хаскелле в сфере обработки данных должны быть примерно одинаковыми по скорости.

А расскажите что там с хаскеллем, кстати. В контексте комментария я все же сравнивал с С/С++, так то R Studio есть отличный.


С питоном я в последнее время постоянно использую colab.

UFO just landed and posted this here
jupyter это вообще мечта


А по мне, так это весьма ограниченный и урезанный клон Wolfram Mathematica Notebook.
По крайней мере, после математики, при попытке работы с юпитером всё время чувствуешь себя не в той тарелке из-за кучи ограничений и урезанного функционала.

Собственно, все те задачи быстрого прототипирования и «поиграться с идеей» более комфортно решаются в вольфраме.

Хотя, для дата-сайенса, разумеется, питон будет лучше, но только из-за наличия большого числа готовых специализованных пакетов.
А по мне, так это весьма ограниченный и урезанный клон Wolfram Mathematica Notebook

В общем случае, справедливо. В данном сравнении могу сказать что питон просто проще интегрируется с прототипированием кода — веб-апи на математике не пишут все же, а тут можно написать веб-клиент и быстро его же и потестить. Питон, кмк, более универсален в этом вопросе.


Математика офигенная потому что там датасеты из коробки.

В принципе есть мастера, которые топором выделывают просто офигительные произведения искусства из дерева. Есть виртуозы, умеющие с асфальта поднять монетку ковшом экскаватора.

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

Мастера отличает не только владение определённым инструментом, но и умение выбрать кисть, которой он будет реализовывать конкретную мысль.

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

Вот собственно об этом и был вопрос.
Философские обобщения здесь очевидны и посему банальны.

Хорошо, хотите простейший пример, где питон выигрывает?


Вот вам школьные задачки


Py:
def f(x,y,w,z):
    return int((x and not y) or (y==z) or not w)

print('x y w z')
for n in range(0b1, 0b10000):
    x = n>>3
    y = (n >> 2) & 1
    w = (n >> 1) & 1
    z = n & 1

    r = f(x, y, w, z)
    if not r:
        print("{} {} {} {} = {}".format(x, y, w, z, r))

C
#include<stdio.h>

int F(int x, int y, int w, int z){
    return (x & !y) || (y==z) || !w;
}

int main() {

    printf("x y w z\n");

    for (int i = 0b1; i < 0b10000; i++){
        int x = i >> 3;
        int y = (i >> 2) & 1;
        int w = (i >> 1) & 1;
        int z = i & 1;

        int r = F(x,y,w,z);
        if (!r)
            printf("%i %i %i %i = %i\n", x, y, w, z, r);
    }

}

Разница даже не в количестве строк, а количестве мыслей, которые нужно применить. Сначала типы, потом библиотека, потом компиляция...


Если хотите более сложные и приближенные к жизни примеры, то держите:


  1. Была задача сделать сервак для игрушки небольшой браузерной. Пусть будут карты. За 3 дня накатан макет на питоне, который прекрасно работал. Выдали деньги на разработку и клиент уже даже первый пакет правок подготовил по макету, а не по готовой кодовой базе. Лишние 10 часов не выброшено в мусорку.
  2. Личная задачка: на компе есть бд с треками (название, исполнитель, жанр ...) и плейлистами. Нужно при подключении телефона на его карточку копировать файлы из конкретного плейлиста. Сначала был сделан прототип на питоне, оттестирован, выявлен основной функционал. Потом была сделана программка на ржаве. Сейчас прекраснейшим образом работает.

Таких примеров куча. Если свести их к одному тезису, то


Питон — скриптовый язык без узкой специализации, который можно применить где угодно и быстро.
Так никто особо и не спорит с тем фактом, что прототипирование на Питоне удобно и быстро. Просто для «неокрепших умов» такая легкость входа приводит к тому, что его начинают использовать везде и всегда. И как только на проект вместо 1 RPS, прилетает 10+ или 100+ RPS уже «поздно пить боржоми» и начинаются сначала танцы с бубнами, а потом переписывание.
С моей точки зрения, питонист, который пришел в питон после C++ или чего то подобного, как правило принимает более грамотные и взвешенные решения по части использовать питон или нет на проде, нежели чем тот, который как сел на старте на питон, так и использует его везде и всегда, по делу и без дела.
С моей точки зрения...

Да, я много где уже слышал позицию "первый язык влияет на мышление". Но я отношусь к тому меньшинству, считающему, что вообще любой язык влияет на мышление. Для меня нет разницы, был первым питон или плюсы — человек по идее после изучения обоих умеет писать и на том, и на том. Если человек умеет думать головой, то для него язык только инструмент, выражающий мысль, а не трафарет, по которому стоит мыслить.


Возможно я просто ещё не настолько стар, чтобы понимать вымывающуюся гибкость сознания. Просто я пока вижу только то, что многие (я и сам иногда грешу) мыслят терминами. Вот в расто сообществе есть такой прекрасный термин, выражающий как раз негибкость и трафаретированность сознания — "ооп головного мозга".

UFO just landed and posted this here
О! Спасибо. Это дельно. В общем, чувствую — надо осваивать. )))

Странно, конечно, знакомить программистское сообщество с языком, имеющим где-то 20-летнюю историю.
Видно Хабр превращается в ленту типа — недавно я прочитал и расскажу, что понял

Есть люди, которые еще не знакомы с питоном. Некоторые из них недавно пришли на хабр. Почему нет?
Я неоднократно начинал знакомство с какой-то технологии именно благодаря еще одной вводной статье. Видел её в ленте и вспоминал «точно, хотел же вот попробовать».

Как мне, так лучше почитать специализированный сайтик, который находится в первой строке поиска по питону, чем вот эту вот "статейку", которая мало того что просто ничему не учит, мало того что элементарный отступный синтаксис не учитывает, так 3 строка первого примера (for i in ( ... ]:) меня просто убивает своей безграмотностью.

А я не говорил ничего про конкретно эту статью. Я отвечал на регулярно возникающий вопрос про статьи-знакомства в целом.
Ну вот опять… После такого «введения», желание познакомится с питоном пропадёт на веки вечные. Автор, вам самому бы не мешалось пройтись по официальному туториалу, перед тем как какие-либо руководства писать.
А что за оператор ln в python?
in знаю, а вот ln впервые вижу…
Сам начал изучать Python — для чего? Не знаю, все про него говорят, все на нем делают… вот решил попробовать. Первые сложности — это банально синтаксис, а именно эти отступы и оформление кода. Далее, читая книгу все больше понимаю, что с данным языком программирования, кроме как выше писали для аналитических вещей и простых игр не уедешь ((( Для основной работы использую Lazarus, VBA, немного JS и на этих языка больше всего сделал для работы, чем на Python'е. ))) Прошло еще немного времени и интерес к данному языку еще больше угас (
я тут мемчик один видел, всегда все интересно в ВК сохраняю, а тут видимо посмеялся и дальше прошел, так вот, там значит лестница, на первой ступени Hello, World потом структуры данных, алгоритмы, и на 4 или пятой ступеньке Data Science, и типа современный студент там с первой лестницы перешагивает 2,3 ступеньки и сразу на Data Science )) вот у меня от заголовка и тизера сразу же вспомнил эту картинку, т.е. Python для начинающих и сразу TensorFlow :-)))

Автор, зачем ты это пишешь, если даже не можешь прочитать своё творчество и исправить некорректный код. Посмотри ещё раз на свой текст, где у тебя отступы в коде, что вообще со скобками творится (]?! Для кого, для чего писать такие статьи?

Гм… Может для начала стоит почитать теорию по машинному обучению?

Чёрт, после вашего комментария до меня дошло: это не автор писал! Это результат «машинного обучения» по написанию статей о Питоне :D
Вы открыли мне глаза, спасибо большое :)
Судя по

def subtract ( a=0, Ь=0 ) :

(мягкий знак, Карл!) так оно и есть. Только где-то ещё имело место text recognition.
Благодаря хабровской подсветке синтаксиса в глаза сильно бросается буква З вместо цифры 3 в этом куске кода:
for j in (1, 2, З, 4, 5 ] :
Так что да, тут однозначно автоматическое распознавание текста + (возможно) автоматический перевод. Чем-то напоминает ситуацию в относительно недавней статье про автоматическую генерацию и публикацию в Google Play однотипных слот-машин

Мы присутсвуем при историческом событии. Это первый шаг: "ИИ прочитал статью по питону и написал об этом на хабр". Потом ещё пару книг прочтет и начнет писать код. Следите за новостями.

А знаете, что самое неприятное? После трех дней жизни публикации ни один из всех этих откровенных косяков (другого слова я не нашел) не был исправлен человеком.
на самом деле пробелы в большинстве не наказуемы. А вот отступы надо выучить, но я не вижу разницу между отступом и {} в количестве нажатий, а иногда даже отступ удобнее, чем поиск незакрытых скобок. Тот же пишарм половину этих действий автоматически делает
Sign up to leave a comment.

Articles

Change theme settings