Я учусь, работаю и играю с Python уже полтора года. Будучи биологом, медленно переходящим к биоинформатике, этот язык был в основе всех основных вкладов, которые я сделал в лаборатории. Я более или менее влюбился в то, как Python позволяет мне выражать прекрасные решения, а также в семантику языка, которая обеспечивает такой естественный переход от мыслей к работоспособному коду.
Что я хотел бы знать, так это ваш ответ на вопрос, который я редко видел на этом или других форумах. Этот вопрос кажется мне центральным для любого, кто находится на пути к улучшению Python, но кто задается вопросом, какими должны быть его дальнейшие шаги.
Позвольте мне подвести итог тому, что я НЕ хочу сначала спросить;)
- Я не хочу знать, как БЫСТРО изучать Python
- Также я не хочу найти лучший способ познакомиться с языком
- Наконец, я не хочу знать подход «один трюк, который делает все».
То, о чем я хочу знать ваше мнение, это:
Какие шаги вы бы порекомендовали подмастерью Python, от ученичества до статуса гуру (не стесняйтесь останавливаться везде, где этого требует ваш опыт), чтобы он УЛУЧШАЛСЯ ПОСТОЯННО, становясь все лучше и лучше программистом Python, один шаг за раз. Некоторые из людей на SO кажутся почти достойными поклонения за их мастерство Python, пожалуйста, просветите нас :)
Ответы, которые мне понравятся (но не стесняйтесь удивлять читателей: P), отформатированы примерно так:
- Прочитайте это (например, учебник по Python), обратите внимание на такие детали
- Код для стольких / проблем / строк кода
- Затем прочитайте это (например: ту или иную книгу), но на этот раз обратите внимание на это
- Решить несколько реальных проблем
- Затем перейдите к чтению Y.
- Обязательно поймите эти понятия
- Код для времени X
- Вернитесь к таким-то основам или перейдите к ...
- (вы поняли :)
Мне действительно важно знать ваше мнение о том, на что именно следует обращать внимание, на разных этапах, чтобы ПОСТОЯННО прогрессировать (конечно, с должными усилиями). Если вы пришли из конкретной области знаний, обсудите путь, который вы видите соответствующим образом в этой области.
РЕДАКТИРОВАТЬ: Благодаря вашему великому вкладу, я вернулся на трек улучшения Python! Я действительно ценю!
Хороший способ расширить свои знания Python - это изучить исходный код библиотек, платформ и фреймворков, которые вы уже используете.
Например, если вы создаете сайт на Django , на многие вопросы, которые могут озадачить вас, можно ответить, посмотрев, как Django реализует данную функцию.
Таким образом, вы продолжите изучать новые идиомы, стили кодирования и приемы Python . (Некоторые будут хорошими, а некоторые плохими.)
И когда вы увидите что-то Pythony, которого вы не понимаете в источнике, перейдите на IRC-канал #python, и вы найдете множество «языковых адвокатов», которые с удовольствием объяснят.
Накопление этих небольших разъяснений за многие годы приводит к гораздо более глубокому пониманию языка и всех его входов и выходов.
источник
Понимать (более глубоко) типы данных Python и их роли в отношении mgmt памяти
Как известно некоторым из вас в сообществе, я преподаю курсы Python , наиболее популярными из которых являются комплексный курс Intro + Intermediate, а также «продвинутый» курс, который знакомит с различными областями разработки приложений.
Довольно часто мне задают вопрос, очень похожий на: «Должен ли я взять ваш вступительный или продвинутый курс? Я уже программирую на Python в течение 1-2 лет, и я думаю, что вступительный слишком прост для меня, поэтому я бы хотел бы прыгнуть прямо в продвинутый ... какой курс вы бы порекомендовали? "
Чтобы ответить на их вопрос, я проверяю, насколько сильны они в этой области - не то, что это действительно лучший способ измерить, готовы ли они к какому-либо продвинутому курсу, а узнать, насколько хорошо их базовые знания об объектах Python и модель памяти, которая является причиной многих ошибок Python, написанных не только новичками, но и теми, кто вышел за рамки этого.
Чтобы сделать это, я указываю им на этот простой вопрос из двух частей:
Часто они могут получить результат, но почему ответ сложнее и гораздо важнее ответа ... Я бы оценил результат как 20% ответа, в то время как «почему» получает 80% кредита. Если они не могут понять причину, независимо от того, какой у них опыт работы с Python, я всегда буду направлять людей на всесторонний вводный + промежуточный курс, потому что я провожу одну лекцию по объектам и управлению памятью до такой степени, что вы сможете ответить с помощью выход и почему с достаточной уверенностью. (Только потому, что вы знаете синтаксис Python через 1-2 года, вы не готовы выйти за рамки ярлыка «новичок», пока у вас не будет гораздо лучшего понимания того, как Python работает под прикрытием.)
Успешный запрос, требующий аналогичного ответа, еще сложнее, например,
Пример 3
Следующие темы, которые я рекомендую, - это хорошее понимание подсчета ссылок, изучение того, что означает «интернирование» (но не обязательно его использование), изучение мелких и глубоких копий (как в примере 3 выше) и, наконец, взаимосвязи между различными типами и конструкции на языке, то есть списки против кортежей, дикты против множеств, списочные понимания против выражений генератора, итераторы против генераторов и т. д .; однако все эти другие предложения - другой пост для другого времени. Надеюсь, это поможет в то же время! :-)
пс. Я согласен с другими ответами для того, чтобы стать более близкими к самоанализу, а также для изучения исходного кода других проектов и добавить сильное «+1» к обоим предложениям!
имп. Отличный вопрос, кстати. Хотелось бы, чтобы вначале я был достаточно умен, чтобы спрашивать что-то подобное, но это было давно, и теперь я пытаюсь помочь другим в моем многолетнем программировании на Python!
источник
print
не заявление.Посмотрите эссе Питера Норвига о том, как стать мастером-программистом за 10 лет: http://norvig.com/21-days.html . Держу пари, что это справедливо для любого языка.
источник
Понять интроспекцию
dir()
эквивалентtype()
эквивалентdis
модуль, чтобы увидеть, как работают различные языковые конструкцииДелать эти вещи будет
источник
type()
эквивалент» было бы очень сложно, если бы вы взяли полную спецификацию метаклассикиtype
!источник
Я дам вам самый простой и эффективный совет, я думаю, что любой может дать вам: code .
Вы можете только лучше использовать язык (что подразумевает его понимание), кодируя . Вы должны активно наслаждаться кодированием, вдохновляться, задавать вопросы и самостоятельно находить ответы.
Есть час, чтобы сэкономить? Напишите код, который перевернет строку, и найдите наиболее оптимальное решение. Свободный вечер? Почему бы не попробовать веб-соскоб. Читайте код других людей. Посмотрите, как они делают вещи. Спросите себя, что бы вы сделали.
Когда мне скучно за компьютером, я открываю свою среду IDE и code-storm. Я записываю идеи, которые звучат интересно и интересно. Сокращение URL? Конечно, я могу это сделать. О, я научился конвертировать числа из одной базы в другую как побочный эффект!
Это действительно независимо от вашего уровня квалификации. Вы никогда не прекращаете учиться. Активно программируя в свободное время, вы без особых дополнительных усилий придете к пониманию языка и в конечном итоге станете гуру. Вы будете накапливать знания и многократно используемый код и запоминать идиомы.
источник
Если вы используете и используете Python для науки (а это, похоже, так и есть), частью этого будет изучение и понимание научных библиотек, для меня это будет
знание того, как использовать правильные библиотеки и векторизовать ваш код, необходимо для научных вычислений.
Я хотел добавить, что обработка больших числовых наборов данных обычными питоническими способами (объектно-ориентированные подходы, списки, итераторы) может быть крайне неэффективной. В научных вычислениях может возникнуть необходимость структурировать ваш код способами, которые кардинально отличаются от того, как большинство обычных программистов Python обращаются к данным.
источник
Google недавно выпустил онлайн-класс Python («класс», как в «курсе обучения»).
http://code.google.com/edu/languages/google-python-class/
Я знаю, что это не отвечает на ваш полный вопрос, но я думаю, что это отличное место для начала!
источник
Скачайте Twisted и посмотрите на исходный код. Они используют довольно продвинутые методы.
источник
Тщательно понять все типы данных и структуры
Для каждого типа и структуры напишите серию демонстрационных программ, которые реализуют каждый аспект типа или структуры данных. Если вы сделаете это, возможно, стоит написать заметки по каждому из них ... это может быть полезно многим людям!
источник
Сначала я выучил python самостоятельно, просто выполнив урок на сайте python (к сожалению, я, похоже, больше не могу его найти, поэтому не могу опубликовать ссылку).
Позже, Python преподавали мне на одном из моих курсов первого года в университете. Следующим летом я тренировался с PythonChallenge и с проблемами из Google Code Jam . Решение этих проблем помогает как с алгоритмической точки зрения, так и с точки зрения изучения того, что может делать Python, а также того, как манипулировать им, чтобы получить максимальную отдачу от Python.
По тем же причинам я слышал, что Code Golf тоже работает, но я никогда не пробовал это для себя.
источник
Алгоритмы обучения / математика / файловый ввод-вывод / оптимизация Pythonic
Это не даст вам гуру, но для начала попробуйте поработать над проблемами Project Euler . Первые 50 или около того не должны облагаться налогом, если у вас хорошая школьная математика и вы знаете, как пользоваться Google. Когда вы решаете один из них, вы попадаете на форум, где вы можете просматривать решения других людей, которые научат вас еще больше. Будьте порядочными и не публикуйте свои решения, так как идея состоит в том, чтобы побудить людей выработать это для себя.
Заставить себя работать в Python будет непростительно, если вы будете использовать алгоритмы перебора. Это научит вас размещать большие наборы данных в памяти и эффективно получать к ним доступ с помощью быстрых языковых функций, таких как словари.
Из этого я узнал:
А также очень важно
Все это должно иметь отношение к биоинформатике
По общему признанию я не узнал об особенностях ООП Python из этого опыта.
источник
Вы видели книгу " Программирование в биоинформатике с использованием Python "? Похоже, вы точный член его фокус-группы.
источник
У вас уже есть много материалов для чтения, но если вы можете справиться с большим количеством вопросов, я рекомендую вам узнать об эволюции Python, прочитав предложения по улучшению Python, особенно «Законченные» PEP и «Отложенные, оставленные, изъятые и отклоненные» ВПД.
Видя, как изменился язык, принятые решения и их обоснование, вы освоите философию Python и поймете, как возникает «идиоматический Python».
http://www.python.org/dev/peps/
источник
Попытка http://challenge.greplin.com/ с использованием Python
источник
Обучение кого-то еще, кто начинает изучать Python, всегда является отличным способом прояснить ваши идеи, и иногда я обычно получаю много аккуратных вопросов от студентов, которые заставляют меня переосмыслить концептуальные вещи о Python.
источник
Не совсем то, что вы просите, но я думаю, что это хороший совет.
Учите другой язык, не важно, какой. Каждый язык имеет свои собственные идеи и соглашения, которые вы можете выучить. Узнайте о различиях в языках и, что более важно,
why
они разные. Попробуйте чисто функциональный язык, такой как Haskell, и посмотрите на некоторые преимущества (и проблемы) функций без побочных эффектов. Посмотрите, как вы можете применить некоторые вещи, которые вы изучаете на других языках, к Python.источник
Я рекомендую начать с того, что заставляет вас исследовать выразительную силу синтаксиса. Python допускает много разных способов написания одной и той же функциональности, но часто существует один самый элегантный и быстрый подход. Если вы привыкли к идиомам других языков, вы никогда не найдете и не примете эти лучшие способы. Я провел выходные, разбираясь с первыми 20 или около того проблемами Project Euler, и сделал простое веб-приложение с Django на Google App Engine. Возможно, это приведет вас только от ученика к новичку, но затем вы сможете продолжить создавать более сложные веб-приложения и решать более сложные проблемы Project Euler. Через несколько месяцев я вернулся и решил первые 20 проблем PE с нуля за час, а не по выходным.
источник