чайников - python скачать




Путь развития Python-от ученика до гуру (13)

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

То, что я хотел бы знать, - это ваш ответ на какой-то вопрос, который я редко видел на этом или других форумах. Этот вопрос кажется для меня ключевым для любого на пути улучшения Python, но он задается вопросом, какими должны быть его следующие шаги.

Позвольте мне подвести итог тому, что я НЕ хочу сначала спросить;)

  • Я не хочу знать, как БЫСТРО изучить Python
  • Я также не хочу найти лучший способ познакомиться с языком
  • Наконец, я не хочу знать, что «один трюк, который делает все это».

Я хочу знать ваше мнение о том, что:

Каковы шаги, которые вы рекомендовали бы подмастерье Питона: от ученичества до статуса гуру (не стесняйтесь останавливаться везде, где ваш опыт диктует его), для того, чтобы УЛУЧШИТЬ ПОСТОЯННО, становясь лучшим и лучшим кодером Python, шаг за шагом. Некоторые из людей на SO почти кажутся достойными поклонения за их мастерство на Python, пожалуйста, просветите нас :)

Ответы, которые мне понравились (но не стесняйтесь удивлять читателей: P), отформатированы примерно так:

  • Прочтите это (например: учебник python), обратите внимание на такие детали
  • Код для так много времени / проблем / строк кода
  • Затем прочитайте это (например: ту или иную книгу), но на этот раз обратите внимание на это
  • Решите несколько реальных проблем
  • Затем переходите к чтению Y.
  • Не забудьте понять эти понятия
  • Код для Х-времени
  • Вернитесь к таким-то основам или двигайтесь дальше ...
  • (вы получаете точку :)

Мне действительно интересно узнать ваше мнение о том, на что именно следует обратить внимание на разных этапах, чтобы продвигаться ПОСТОЯННО (с должными усилиями, конечно). Если вы пришли из определенной области знаний, обсудите путь, который вы видите соответствующим образом в этой области.

EDIT: Благодаря вашему большому вкладу я вернусь на дорожку улучшения Python! Я весьма признателен!


Изучение алгоритмов / математика / файловая оптимизация IO / Pythonic

Это не даст вам гуру-капюшон, но для начала, попробуйте работать через проблемы Project Euler . Первые 50 или около того не должны облагать вас налогом, если у вас есть приличная математика средней школы и знаете, как Google. Когда вы решаете вопрос, вы попадаете на форум, где вы можете просматривать решения других людей, которые научат вас еще больше. Будьте достойны, хотя и не публикуйте свои решения, так как идея состоит в том, чтобы побудить людей работать над собой.

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

Из этого я узнал:

  • Файл IO
  • Алгоритмы и методы, такие как динамическое программирование
  • Расположение данных Python
    • Словари / HashMaps
    • Списки
    • Кортеж
    • Различные их комбинации, например словари, в списки кортежей
  • Генераторы
  • Рекурсивные функции
  • Разработка библиотек Python
    • Расположение файловой системы
    • Перезагрузка их во время сеанса переводчика

А также очень важно

  • Когда сдавать и использовать C или C ++!

Все это должно иметь отношение к биоинформатике

По общему признанию, я не узнал о возможностях OOP Python из этого опыта.



Загрузите Twisted и посмотрите на исходный код. Они используют некоторые довольно продвинутые методы.


Не совсем то, о чем вы просите, но я думаю, что это хороший совет.

Изучайте другой язык, не важно, что. На каждом языке есть свои идеи и соглашения, из которых вы можете учиться. Узнайте о различиях в языках и, что более важно, why они разные. Попробуйте чисто функциональный язык, такой как Haskell, и посмотрите на некоторые из преимуществ (и проблем) функций, свободных от побочных эффектов. Посмотрите, как вы можете применить некоторые вещи, которые вы изучаете на других языках, к Python.


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

Например, если вы создаете сайт на Django , на многие вопросы, на которые может наколоть вас, можно ответить, посмотрев, как Django реализует эту функцию.

Таким образом, вы продолжите собирать новые идиомы, стили кодирования и трюки Python . (Некоторые будут хорошими, а некоторые будут плохими.)

И когда вы видите что-то Pythony, которое вы не понимаете в источнике, переходите на канал #python IRC, и вы найдете много «юридических юристов», которые рады объяснить.

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



Просмотрите эссе Питера Норвига о том, чтобы стать мастером-программистом через 10 лет: http://norvig.com/21-days.html . Я бы сказал, что это верно для любого языка.


Сначала я изучил python сам за лето, выполнив учебник на сайте python (к сожалению, я, похоже, больше не могу его найти, поэтому я не могу опубликовать ссылку).

Позже, питон учил меня на одном из моих первых курсов в университете. Летом после этого я практиковал PythonChallenge и проблемы с Google Code Jam . Решение этих проблем помогает с точки зрения алгоритма, а также с точки зрения изучения того, что Python может делать, а также как манипулировать им, чтобы получить максимальную отдачу от python.

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


Я дам вам самый простой и эффективный совет, который, как я думаю, может дать вам: код .

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

У вас есть час, чтобы сэкономить? Напишите код, который изменит строку и найдет наиболее оптимальное решение. Бесплатный вечер? Почему бы не попробовать некоторые веб-соскабливания. Прочтите код других народов. Посмотрите, как они это делают. Спросите себя, что вы будете делать.

Когда мне скучно на моем компьютере, я открываю свои IDE и кодовые бури. Я записываю идеи, которые кажутся интересными и сложными. Укорачивание URL? Конечно, я могу это сделать. О, я научился конвертировать числа из одной базы в другую как побочный эффект!

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


Я думал, что процесс овладения Python прошел примерно так:

  1. Обнаружение списков
  2. Обнаружение generators
  3. Включение карты, уменьшение, фильтра, итера, диапазон, частое изменение в свой код
  4. Откройте для себя Decorators
  5. Записывать рекурсивные функции, много
  6. Откройте для себя itertools и itertools
  7. Читайте Real World Haskell ( читайте онлайн бесплатно )
  8. Перепишите весь свой старый код Python с тоннами функций более высокого порядка, рекурсии и еще чего-то.
  9. Раздражайте своих помощников в шкафу каждый раз, когда они представляют вам класс Python. Заявите, что он может быть «лучше» реализован как словарь плюс некоторые функции. Объявите функциональное программирование.
  10. Переустановите шаблон Strategy , а затем все эти вещи из императивного кода, который вы так долго пытались забыть после Haskell.
  11. Найдите баланс.

Понимать (более глубоко) типы данных Python и их роли в отношении памяти mgmt

Как знают некоторые из вас в сообществе, я преподаю курсы Python , наиболее популярными из которых являются комплексный курс Intro + Intermediate, а также «продвинутый» курс, который представляет различные области разработки приложений.

Довольно часто мне задают вопрос, похожий на вопрос: «Должен ли я взять ваш вступительный или расширенный курс? Я уже программировал Python в течение 1-2 лет, и я думаю, что введение слишком просто для меня, поэтому я бы как прыгать прямо на продвинутый ... какой курс вы бы порекомендовали? "

Чтобы ответить на их вопрос, я исследую, насколько они сильны в этой области - не то, что это действительно лучший способ оценить, готовы ли они к продвинутому курсу, но чтобы понять, насколько хорошо их базовые знания принадлежат объектам Python и памяти, что является причиной многих ошибок Python, написанных теми, кто не только новичками, но и теми, кто вышел за рамки этого.

Чтобы сделать это, я указываю им на этот простой вопрос из двух частей:

Много раз они могут получить выход, но почему сложнее и гораздо важнее ответ ... Я бы весил результат как 20% ответа, а «почему» получает 80% кредита. Если они не могут понять, почему, независимо от того, какой у них опыт работы с Python, я всегда буду руководить людьми с помощью комплексного интро + промежуточного курса, потому что я провожу одну лекцию по управлению объектами и памятью до такой степени, чтобы вы могли ответить и с достаточной уверенностью. (Просто потому, что вы знаете, что синтаксис Python через 1-2 года не делает вас готовым выйти за рамки «новичка», пока вы не поймете, насколько лучше Python работает под обложками).

Следующее задание, требующее аналогичного ответа, еще более жесткое, например,

Пример 3.

x = ['foo', [1,2,3], 10.4]
y = list(x) # or x[:]
y[0] = 'fooooooo'
y[1][0] = 4
print x
print y

Следующими темами, которые я рекомендую, является понимание понимания подсчета, изучение того, что означает «интернирование» (но не обязательно его использование), изучение мелких и глубоких копий (как в примере 3 выше) и, наконец, взаимосвязи между различными типами и строит в языке, то есть списки против кортежей, dicts против наборов, понимание списков по сравнению с генераторными выражениями, итераторами против генераторов и т. д .; однако все эти другие предложения являются еще одной записью в другое время. Надеюсь, это поможет в то же время! :-)

пс. Я согласен с другими ответами для более интимной интроспекции, а также изучения исходного кода других проектов и добавления сильного «+1» к обоим предложениям!

имп. Большой вопрос BTW. Хотелось бы, чтобы я был достаточно умен в начале, чтобы спросить что-то подобное, но это было давно, и теперь я пытаюсь помочь другим с моим многолетним программированием на Python на полный рабочий день!


Понять интроспекцию

  • напишите эквивалент dir()
  • напишите эквивалент type()
  • выяснить, как "monkey-patch"
  • используйте модуль dis чтобы узнать, как работают различные языковые конструкции

Выполнение этих действий

  • дать вам несколько хороших теоретических знаний о том, как реализован python
  • дать вам хороший практический опыт программирования на нижнем уровне
  • дать вам хорошее интуитивное чувство для структур данных python

def apprentice():
  read(diveintopython)
  experiment(interpreter)
  read(python_tutorial)
  experiment(interpreter, modules/files)
  watch(pycon)

def master():
  refer(python-essential-reference)
  refer(PEPs/language reference)
  experiment()
  read(good_python_code) # Eg. twisted, other libraries
  write(basic_library)   # reinvent wheel and compare to existing wheels
  if have_interesting_ideas:
     give_talk(pycon)

def guru():
  pass # Not qualified to comment. Fix the GIL perhaps?






python