Форум сайта python.su
Здравствуйте, уважаемые питонисты!
Сколько не читаю про питон, везде на него молятся, а я после с# + Visual Studio не могу понять, чем он такой простой и удобный.
Питон, на мой взгляд действительно легко читается. Впервые увидев скрипт на питоне, я смог сообразить что он примерно делает и даже немного его изменить. Прикольно. Кроссплатформенность, конечно же, то же круто. НО. На нем ведь надо еще как-то писать. И вот тут я видимо что-то не понимаю.
1. Нестрогая типизация.
Нестрогая типизация - на мой взгляд всегда минус, т.к. контролировать приходится не только значения переменных но и их тип, что бы случайно не сложить десяток слонов с третьей фазой луны.
2. Отсутствие(частичное) IntelliSens. Кодить без IntelliSens, все равно что кодить в блокноте с макросом для компиляции. Меня просто ужасает, что чтобы использовать базовый функционал, нужно НАИЗУСТЬ знать ВСЕ
встроенные функции. Например, “open()”. Но знать “open()” не достаточно. Так же стоит знать еще 7 литералов для режима открытия файла. Никаких Enum. Никаких подсказок.
Пожалуй это основное, что мне останавливает…
Я решил посмотреть как мне открыть сокет:
sock = socket.socket()
Что млять простите? Как я должен догадаться до такой конструкции? Неужели это выглядит очевидно?
И так для всего, что я пытаюсь изучать. Вернее сказать, для всего конструкторы работает по разному. Если в c# мне достаточно выучить 2-3 варианта создания класса:
1. new
2. паттерн Create
3. уникальные варианты(для специфичных библиотек)
То в случае с Питоном, все является специфичным. Любая мелочь пишется как-то по своему. Общая логика кода отсутствует напрочь.
Но это все было бы не страшно, если бы корректно работал intelliSens и когда я пишу “socket” и ставлю точку после него, мне предлагались варианты:
1. socket.socket() - конструктор
2. …еще несколько вариантов
Вместо этого, intelliSens выдает просто все что в ней есть. Тупой набор слов, без малейшей подсказки, что именно мне следует писать далее.
Я реально не понимаю, как вы кодите на этом. Со справочником и 100500+ вкладками в браузере для всех используемых библиотек(пакетов)?
Или все-таки есть какой-то нормальный способ кодить методом набора кода, а не методом копипаста из браузера?
Офлайн
DezmontDeXaНе всегда. Надо сказать, что вы, кажется, путаете “строгую” типизацию и “динамическую” типизацию. В питоне нет никакого тайп-кастинга, так что типизацию можно считать вполне строгой. Другое дело, что тип переменной может менятся в рантайме, но это ты уже сам себе злобный Буратино, если так делаешь. Постольку поскольку в питоне ничего не компилируется, есть только рантайм и в рантайме могут создаваться и изменяться типы, функции и даже модули. Это в свою очередь дает возможность применения интересных техник, вроде декораторов или метаклассов (посмотрите на магию моделей в Джанго), которые в C# и Java можно реализовать только построцессорами и правкой байт-кода (посмотрите на AspectJ) то есть требует серьезных затрат труда для реализации и недоступно простым программистам. В питоне сделать что-то похожее на магию CDI и EJB можно за пару часов непринужденного кодинга.
Нестрогая типизация - на мой взгляд всегда минус
DezmontDeXaДык это от IDE зависит или от среды выполнения, а не от языка. Вы просто не знаете стек инструментов, мало кто пишет на питоне под студией. Все хорошо и с автодополнением (попробуйте ipython, например) и с линтерами и с прочим.
Отсутствие(частичное) IntelliSens.
DezmontDeXaДля литералов или вообще? Вообще они есть.
Никаких Enum.
DezmontDeXaПо правде сказать не сложное дело запомнить, что “w” это режим записи, а “r” чтения. Вы, надеюсь, не рвете волосы из носа видя вывод команды ls -la в линуксе?
Так же стоит знать еще 7 литералов для режима открытия файла
DezmontDeXaА что вас удивляет в этой конструкции? Есть модуль (или пакет) socket, в этом модуле есть функция socket. Вы же знакомы с понятием namespace, что не так то?
socket.socket()… Как я должен догадаться до такой конструкции?
DezmontDeXaДавайте на примерах, а то какое-то бла-бла-бла. В питоне есть ровно один способ создания объекта - Class(*args, **kwargs).
То в случае с Питоном, все является специфичным. Любая мелочь пишется как-то по своему. Общая логика кода отсутствует напрочь.
DezmontDeXa
Но это все было бы не страшно, если бы корректно работал intelliSens и когда я пишу “socket” и ставлю точку после него, мне предлагались варианты:
1. socket.socket() - конструктор
2. …еще несколько вариантов
Вместо этого, intelliSens выдает просто все что в ней есть. Тупой набор слов, без малейшей подсказки, что именно мне следует писать далее.
DezmontDeXaНу то есть вы не прочитав ни одного учебника по питону, не зная инструментария кроме любимой студии, не имея опыта помимо C# (на Си, я так понимаю вы никогда не программировали) не понимаете. Ну и не поймёте. Забейте и не парьтесь, вам это не надо, питон крайне сложен и писать на нем - каторга
Я реально не понимаю, как вы кодите на этом.
Офлайн
FishHookВот api vk:
Давайте на примерах, а то какое-то бла-бла-бла. В питоне есть ровно один способ создания объекта - Class(*args, **kwargs).
FishHookПризнаю, не читал ни одного учебника. Нет привычки читать что-то не пробуя это сразу. А в случае с питоном, все уверяют, что он изи. Решил с наскока взять какую-нибудь простую задачу типа udp-чата и попробовать реализовать, поглядывая в туторы и гугля. Но что-то как-то не изи…
Ну то есть вы не прочитав ни одного учебника по питону, не зная инструментария кроме любимой студии, не имея опыта помимо C# (на Си, я так понимаю вы никогда не программировали) не понимаете.
Офлайн
FishHookЯ и не говорил, что невозможно. Но далеко не все стоит писать на Си. А вот на питоне пишут и радуются этому как дети. А я сижу и не могу вкурить, чем он так прекрасен…
Вы же не будете говорить, что на Си невозможно писать код?
Офлайн
DezmontDeXa(УЖОСНАХ!!!!!1111)
Опять таки после точки подсказок не было
DezmontDeXa
Нет привычки читать что-то
DezmontDeXaВы не обижайтесь, но у меня складыфвается стойкое ощущение, что вы яркий представитель поколения мамкиных хакеров, изучающих как они считают программирование по ютубу и комиксам “С++ за 21 день для чайников”.
Но что-то как-то не изи…
Офлайн
DezmontDeXaНу то есть ты после винды не можешь что-то понять в нормальном *NIX-мире. Ну, например, сокеты, которые ты пытаешься создать, пришли в винду из *NIX. А *NIX - это мир языка C. Соответственно, функция open() в питоне так выглядит, потому что удобна для C-программистов как родная. То же самое касается форматирования строк - форматирование взято из библиотечной функции printf() на языке C.
а я после с# + Visual Studio не могу понять
DezmontDeXaНу ты заметил, что можно вообще не имея исходника на питоне, выполнить программу на питоне. То есть можно открыть консоль питона, в ней написать программу на несколько страниц, выполнить её и всё сработает. Её не нужно держать в файле, её не нужно компилировать. Поэтому, когда ты хочешь что-то узнать или проверить, ты просто открываешь консоль, узнаёшь это или проверяешь и сразу закрываешь консоль. Вот ты хочешь создать сокет - просто открой консоль и создай в ней сокет. И он создастся и будет там принимать данные, которые можно читать, откроется порт, к которому можно подключаться. При этом тебе не нужен ни один файл для этого и уж тем более компиляция, настройки нового проекта, его сборки и тому подобное.
чем он такой простой и удобный
>>> import socket >>> help(socket) >>>
DezmontDeXaНестрогая типизация?
Нестрогая типизация - на мой взгляд всегда минус
>>> 1 + 'a' Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'int' and 'str' >>> >>> 1 + object() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'int' and 'object' >>> >>> '5' ** 2 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int' >>>
In: 'a' + 1 + [2] + null Out: "a12null"
DezmontDeXaТы просто не в той среде сидишь. И не в той системе
Кодить без IntelliSens, все равно что кодить в блокноте с макросом для компиляции.
DezmontDeXaА нафиг он вообще нужен, если он в винде только работает? На других языках я могу и под винду писать, но я не обязан писать под винду. А на C# ты будешь должен писать под винду всё время и, соответственно, для него не будет ни сред, ни инструментов, ни нормальной интеграции с новыми технологиями. Docker когда появился, все на него сели сразу, а в винде его не было вообще. Сейчас любой хостинг открываешь, там сайты все существуют в виде изолированных Docker-контейнеров.
Если в c# мне достаточно выучить 2-3 варианта создания класса:
DezmontDeXaЗабудь про эту хрень. Ну ладно, не забывай, но используй её только для C#, потому что она только для него и делалась, чтобы пользователей в винде удерживать.
Visual Studio
Отредактировано py.user.next (Май 17, 2019 09:16:03)
Офлайн
py.user.nextСправедливости ради нужно с казать, что у тебя мягко говоря устаревшие сведенья.
А на C# ты будешь должен писать под винду всё время и
Офлайн
DezmontDeXaНу тут просто, зная один шаблон разработки вы не поняли как ведется разработка в питоне.
И вот тут я видимо что-то не понимаю
Tsome_type a = new Tsome_type(a,b,4); Console.WriteLine(a);
Офлайн
doza_andА как же System.out.println(а)? ))
Console.WriteLine - это ужас после a Enter. любой другой язык гораздо лаконичнее при выводе на консоль или в файл.
py.user.nextМогу за себя сказать, что после примерно полутора лет изучения Явы типизация в Питоне местами действительно в голове не укладывается, например - такое:
Нестрогая типизация?
class A(): pass a1 = A() a2 = A() a1.a = 1000 a2.b = 500 print(a1.a, a2.b, a1.__class__ == a2.__class__)
Офлайн
Egorro13Это если бы топикстартер попытался его изучить, но у него сложности возникают совсем по другой причине.
какие сложности понимания он может вызывать при изучении в принципе,
Офлайн