LINUX.ORG.RU

[Python] Быстрое освоение языка

 


0

1

Какие технологии/фичи в питоне вы считаете важными для реальной разработки. Интересует как web так и desktop применение.

Есть ли некий список best practice?

Какие типовые проекты можете посоветовать для улучшения навыков(примеры : PHP - форум, гостевая книга; Haskell - компилятор, eDSL)


За десктоп забудь, ненавижу идиотов которые пишут десктопные приложения на скриптовых языках. Они же тормозят как хрен знает что!

babusha
()

В питоне самые нящки - генераторы и декотраторы. А еще функции как первоклассные значения. Генераторы в новых версиях еще и корутины. Наиболее няшные технологии - ассинхронные фреймворки - tornado, twisted, gevent.

dizza ★★★★★
()

> примеры : PHP - форум, гостевая книга; Haskell - компилятор, eDSL

Python - язык общего назначения. А вообще за ним закрепилось - веб, матмоделирование, скрипты, backup-системы, gui, прототипирование в широком смылсе

dens-dens-dens
()
Ответ на: комментарий от dens-dens-dens

Мне ruby больше нравится, я его советую, а если петунисты захотели создать читабельный синтаксис, то за ":" после циклов и тд. и насильное заставление ставить скобочки после функций, надо было руки оторвать, а еще из за отсутствия типа «end» в блоках я все время путаюсь, мне петун не нравится, лучше руби.

babusha
()
Ответ на: комментарий от babusha

>после циклов и тд. и насильное заставление ставить скобочки после функций, надо было руки оторвать

надо же, из за скобочки и двоеточия оторвать руки программистам. Руби-фаны все такие?

Зы, по своему опыту замечу что всякие end'ы больше как бельмо на глазу.

def ... ... { } ... end end end end

буээээ))

chinarulezzz ★★
()

pylons == web pyqt4 == desktop

ggrn ★★★★★
()
Ответ на: комментарий от babusha

>> За десктоп забудь, ненавижу идиотов которые пишут десктопные приложения на скриптовых языках.

python

на скриптовых языках.


/0

ggrn ★★★★★
()
Ответ на: комментарий от babusha

Скобки нужны чтобы отличать, что происходит вызов функции, а не объявление / упоминание переменной. А когда функция принимает аргументы, то скобочки не вызывают зубную боль? Так вот - пустые скобки придают синтаксису однородность и явное указание программисту, что здесь _вызывается_, а не упоминается, передается в качестве значения итд функция.

Про end end end огромной никчемной лестницей в коде, которая нафиг рушить всю мысль и приближение к предметной области.

А с двоеточием, что не так? После циклов никакого двоеточия не ставится, если ты не знал, только после первой строчки цикла

dens-dens-dens
()
Ответ на: комментарий от dens-dens-dens

Про end end end огромной никчемной лестницей в коде, которая нафиг рушить всю мысль и приближение к предметной области (fix) тебе уже сказали

dens-dens-dens
()
Ответ на: комментарий от dens-dens-dens

В рубях этой проблемы нет. Другое дело, что просто взять имя функции не оборачивая в обёртку стало невозможно. Впрочем, с блоками кода это не очень страшно.

Про end end end огромной никчемной лестницей в коде, которая нафиг рушить всю мысль и приближение к предметной области.


Если у вас 100500 end в одном месте, то где-то явно что-то не так. А 3 end'а ещё никого не убивали.

Deleted
()
Ответ на: комментарий от babusha

Они же тормозят как хрен знает что!

Snaked, написанный на питоне, ведет себя пошустрее сишного gedit.

baverman ★★★
()
Ответ на: комментарий от Deleted

>взять имя функции не оборачивая в обёртку стало невозможно

Э, ты так делегаты обозвал чтоли, или что?

yoghurt ★★★★★
()
Ответ на: комментарий от Deleted

Если у вас 100500 end в одном месте, то где-то явно что-то не так. А 3 end'а ещё никого не убивали.

 class Product
   include Enumerable
   def initialize *seqs
     @seqs = seqs
   end
   def each &block
     if @seqs.size == 1
       @seqs.first.each &block
     else
       first, *rest = @seqs
       first.each do |x|
         Product.new(*rest).each do |xs|
           block.call(x, *xs)
         end
       end
     end
   end
 end

))) Но это мелочь по сравнению с BEGIN { ... }, END { ... }

chinarulezzz ★★
()
Ответ на: комментарий от chinarulezzz

Да запарили обсуждать скобки с отступами. Взрослеть пора.

dizza ★★★★★
()
Ответ на: комментарий от Deleted

>dens-dens-dens

end end end

а к концу дня говорить-заикаться

minakov ★★★★★
()
Ответ на: комментарий от chinarulezzz

>>Если у вас 100500 end в одном месте, то где-то явно что-то не так.

Ваш код ужасен, какое жуткое неосиливание переносов на новую строку, пробелов и табов.

babusha
()
Ответ на: комментарий от chinarulezzz

>>а что в нём не так?

Вы еще все в одну строку напишите. Все «так».

babusha
()
Ответ на: комментарий от Deleted

Кстати, да, для однострочных блоков do end обычно пишут в виде whatever {|x| blah}.

Deleted
()
Ответ на: комментарий от Deleted

>>5 end'ов тебя убили? Сочувствую. Каменты ставь :}

Ну и что тут такого? Код должен быть еще кому-нибуть понятным кроме автора.

babusha
()
Ответ на: комментарий от Deleted

end в наши дни глупая и неестественная конструкция. Почти везде используются {} для обозначения блоков, или иные парные скобки.

mashina ★★★★★
()

Сейчас вокруг Пайтона сложились 2 основных стереотипа:
1) Самый тормозной язык на свете
2) Джанго - хороший веб-фреймворк

Мнение о производительности пайтона сложилось из таких проектов как Gajim, Rhytmbox, Banshi(или какие там ещё есть поделки). Опыт данных поделий показывает, что пайтон(как и любой высокоуровневый язык) плохо подходит для написания ресурсоёмкой и требовательной к производительности логики(писать приложение на сложной высокопроизводительной сетевой библиотеке - да, писать сложную высокопроизводительную сетевую библиотеку - нет(намёк на твистед, который написан на Си как модуль для пайтона, но используется для приложений на пайтоне)).
Однако, стоит заметить, что даже лёгкую логику, используя Си, можно написать так, что оно будет работать очень медленно(transmission).
Вывод: на пайтоне нужно уметь писать, а не слепо использовать технологию.

Джанго - самый развитый веб-фреймворк на пайтоне, имеющий самую большую публику среди веб-фреймворков на пайтоне же. Просто он самый простой из веб-фреймворков на питоне и, как говорят некоторые люди, стремится быть аналогом RoR(что совсем не так, а даже если бы и было так, то получается оно отвратно, совсем не получается). Джанго тормозит, страдает неоднозначностью(что ласково называется «возможностью выполнить одну вещь многими путями», но это не RoR, здесь это неудачно, очень неудачно), имеет много костылей, неудачные реализации простых вещей и ORM, который хоть и работает быстрее SQLAlchemy, но является страшным гогном.

Какое истинное лицо Python?
В первую очередь, это язык для создания скриптов, десктопных приложений, микро веб-приложений, больших (веб)приложений, требовательных к производительности.
Скрипты - понятно, очень удобно, большая стандартная библиотека, куча возможностей, простой и понятный синтаксис.
Десктопные приложения. Поскольку написание приложений используя GTK, Qt etc на пайтоне - очень простое дело, есть куча биндингов к либам, возможность простого написания логики на Си и использования её на более высоком уровне на питоне, питон является очень хорошим языком для такой цели.
Микро веб-приложения это приложения, в которых нет нужды в большой логике, где нужно чтобы всё работало искаропки или просто не требовало таскать за собой кучу файлов для небольшого приложения. Самый популярный пример - WebPy. Много кто его использует, есть даже люди, которые используют его для сложной логики, что является бредом и фанатизмом. Идеальный пример микро веб-приложения - веб-гуй для rtorrent(увы, никому нет дела, но решение было бы хорошим, лучше чем на пехапе).
Большие (веб)приложения. За счёт того, что узкие места можно написать на Си, а управлять ими на Пайтоне, можно использовать данный язык для крупных приложений, используя высокоуровневый язык для высокого уровня проекта. Это позволило родиться таким веб-фреймворкам как Werkzeug, Pylons, Pyramid etc. Они достаточно просты, динамичны, имеют простую внутреннюю логику, позволяют делать что хочется с любой частью веб-приложения. К таким фреймворкам относятся и Twisted, и Tornado.

Для средних и небольших проектов использовать пайтон слишком сложно и просто не окупается. Проще использовать руби и рельсы.

Я сам использую и руби, и пайтон, и си. У меня есть опыт в использовании и джанго, и рельс, и пайлонс, и пирамид, и твистед, и даже немного PHP с симвонией, зендом, друпалом. Я хорошо взвесил все за и против, хорошо исследовал враждующие технологии и сделал выводы(они описаны выше). Я не защищаю инструменты, я просто говорю какие выводы сделал я, я просто говорю что они совпадают со мнениями опытных программистов, я просто делюсь точкой зрения. Хочешь - прими её, хочешь - нет.
Забавно будет посмотреть на тех, кто сможет назвать меня троллем или фанатиком, поскольку я не использую то, что мне же хуже, а значит я выбираю как можно более подходящие инструменты для своих задач.

tia
()
Ответ на: комментарий от anonymous

Фигня. Это все совковое образование. Вообще надо писать «Я» с большой буквы.

dizza ★★★★★
()
Ответ на: комментарий от tia

Вы заблуждаететь на счёт twisted. Он весь написан на питоне, за небольшим исключением, и довольно тяжёлый фреймворк. twisted никак не может быть 'высокопроизводительной сетевой библиотекой' что и подтверждается практикой.

Вообще у вас везде нестыковки продуктов с языками на которых они написаны - многие продукты из вашей заметки не имеют к питону никакого отношения.

Странно вы разбирались в вопросе.

mashina ★★★★★
()
Ответ на: комментарий от anonymous

Если я рассказываю о себе, своём мнении, опыте, то я должен говорить «я», а не «какой-то дядька», нет?

tia
()
Ответ на: комментарий от mashina

А вот и нет. Twisted написан на пайтоне, да. Однако, вся требовательная логика, включая ядро системы - на си. Пайтон выступает как высокоуровневый язык для построения абстракций работы с низким уровнем. По сути, твистед это и есть высокий уровень, который написан хорошо, с использованием узких мест через либы, модули, написанные на си.

twisted никак не может быть 'высокопроизводительной сетевой библиотекой' что и подтверждается практикой.

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

Вообще у вас везде нестыковки продуктов с языками на которых они написаны - многие продукты из вашей заметки не имеют к питону никакого отношения.

Какие? Про плееры я сразу скажу, я знаю что их написано много на пайтоне и почти все тормозят(уж больно много я наслушался этого), но сам я по той же причине их не использую и названия не держу, поэтому мог и наврать. Однако, смысл передан верно.

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

tia
()
Ответ на: комментарий от anonymous

Да ты знаток извращений, раз используешь такие поделки. Возможно, название спутал с другим поделием, которое активно критикуют, но я не использую их, поэтому их названия у меня не на слуху.

tia
()
Ответ на: комментарий от mashina

Парные скобки там тоже можно ставить, однако эта «современная конструкция» неудобна в свете других современных конструкций, с какими эти символы ещё используются (хэш, например).

Deleted
()
Ответ на: комментарий от tia

> А вот и нет. Twisted написан на пайтоне, да. Однако, вся требовательная логика, включая ядро системы - на си. Пайтон выступает как высокоуровневый язык для построения абстракций работы с низким уровнем. По сути, твистед это и есть высокий уровень, который написан хорошо, с использованием узких мест через либы, модули, написанные на си.

Ради разнообразия, посмотрите в код twisted.

anonymous
()
Ответ на: комментарий от PolarFox

Да-да! Эксайл и ещё какой-то на B, вроде.
В любом случае, надеюсь, я довёл смысл и свою точку мнения до читателя.

tia
()
Ответ на: комментарий от PolarFox

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

tia
()
Ответ на: комментарий от tia

Deluge написана на Питоне. Из 3,7 ГБ RAM 99% — её. В то же время, как Transmission написана на C, эта занимает только 50%.

iZEN ★★★★★
()
Ответ на: комментарий от iZEN

Потому что Deluge написан на пайтоне, а не на си+пайтон.
Вот смотри, если написать интерфейс для tansmission на пайтоне(с биндингом к его либе), то работать будет так-же(инфа 100%, хотя понятно что может быть чуть медленнее, но не на много). Будешь винить пайтон в том, что библиотека на Си тормозит? А если наоборот, написать «ядро» на пайтоне, а фронтэнд на Си и это дело будет тормозить, будешь ли ты винить Си в тормознутости?
Суть улавливаешь?

tia
()
Ответ на: комментарий от tia

Приведите примеры кусков ядра на Си пожалуйста. Не ради флейма. Вижу пару оберток низкоуровневых на сях. И то оно скорее не на скорость влияет. И си там ввернут затем, что подругому ряд функциий из libc python напрямую вызвать не может.

anonymous
()
Ответ на: комментарий от anonymous

>import socket, operator, errno, struct
Смотри сырцы модуля socket.
А ещё файлец iocpsupport.c
Весь сок именно в twisted.internet.iocpreactor и в twisted.python
Очевидности ради стоит заметить что я имею ввиду не только сам твистед, но и то, что он использует. На чём он написан. Именно socket, struct, string, pickle, threading, Queue etc. Всё это написано именно на Си, за счёт чего и достигается скорость.
К слову, питон может напрямую вызвать функции из си, но на вскидку не вспомню как, точно помню что были примеры.

Важно понять что twisted это и есть threading, socket, struct, pickle. А вот эксайл и гаджим это не только данные модули, но и другая тяжёлая логика.

tia
()
Ответ на: комментарий от anonymous

Приведите примеры кусков ядра на Си пожалуйста.

Ничего он тебе не приведет. Это же tia.

SLOC	Directory	SLOC-by-Language (Sorted)
139391  twisted         python=139055,ansic=336
7230    doc             python=7230
104     bin             python=104
68      top_dir         python=68


Totals grouped by language (dominant language first):
python:      146457 (99.77%)
ansic:          336 (0.23%)
$ find . -type f -name *.c 
./twisted/protocols/_c_urlarg.c
./twisted/internet/_sigchld.c
./twisted/internet/iocpreactor/iocpsupport/winsock_pointers.c
./twisted/internet/iocpreactor/iocpsupport/iocpsupport.c
./twisted/runner/portmap.c
./twisted/test/raiser.c
./twisted/python/_initgroups.c
./twisted/python/_epoll.c

Фактически, там только оборачивается доступ к epoll в виде пайтоновского объекта. IOLoop написан на чистом питоне. A tia - просто 20 летний подросток с завышенной самооценкой.

anonymous
()
Ответ на: комментарий от anonymous

Кретин, ты опять лезешь в тему, в которой ничего не знаешь, но хочешь насрать на других?
Ну как-нить тебе аукнится оно. Скоро ты узнаешь.
Твои дампы команд не стоят ничего, поскольку ты не там ищешь «зайца».

tia
()
Ответ на: комментарий от tia

> На чём он написан. Именно socket, struct, string, pickle, threading, Queue etc. Всё это написано именно на Си, за счёт чего и достигается скорость.

CPython написан на Си, за счет этого достигается скорость!!

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.