Исходя из C, как я должен изучать Python?

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

Я видел несколько вопросов о том, как изучать Python, но большинство из них были от людей, которые хотели начать программирование в первый раз. Мне не нужен учебник, который расскажет мне, что такое строка, но мне нужен тот, который может сказать мне, как сделать строку в Python. Любая помощь в некоторых хороших источниках для просмотра? Бонусные очки, если источник свободен:)

Ответ 1

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

Строки в Python на самом деле несколько отличаются от строк в C, и они используются по-разному. Я настоятельно рекомендую изучать их "с нуля", а не думать о них с точки зрения их отличий от строк C. Во-первых, в Python 2 лучше не использовать класс "string" класса Python для представления строк: существует отдельный строковый класс unicode и для практических приложений Python (в значительной степени что-то, что связано с пользовательскими данными), вам это нужно. (Python 3 исправляет это, делая класс str строкой unicode). Вам необходимо установить хорошую рабочую практику для данных в формате unicode/byte и декодировать/кодировать.

Общей ошибкой при изучении второго языка программирования является мысль "Я знаю, как программировать, мне просто нужно перевести то, что я делаю в C на Python". Нет, нет. Хотя верно, что алгоритм может быть в основном одинаковым на разных языках, естественный способ сделать что-то конкретное может быть совершенно другим на разных языках. Вы напишете лучший код Python, если вы научитесь использовать Python идиоматично, чем если бы вы попытались написать Python, как программист на C. Многие из "трюков", которые вы знаете, которые имеют смысл в C, будут либо бессмысленными, либо контрпродуктивными в Python. И наоборот, многие вещи, которые вы должны сделать с радостью в типичной программе Python, например, выделяя и освобождая много памяти, - это вещи, которые в C вы, вероятно, научились дважды обдумывать. Отчасти потому, что типичная программа на языке C имеет разные ограничения от типичной программы Python, а отчасти потому, что вам просто нужно написать больше кода и подумать о том, чтобы сделать что-то прямо в C, чем в Python.

Если вы изучаете язык, потому что вам срочно нужно программировать систему/платформу с Python, но не иметь C, то писать программы Python, которые работают как программы C, являются разумной промежуточной мерой. Но это, вероятно, не относится к вам, и даже если это не является конечной целью.

Одна вещь, которую вам может заинтересовать, потому что вы работаете с C, - это API Python/C. Python отлично подходит для многих вещей, но это не приводит к быстрому вычислительному ядру научных приложений [и не C, возможно, но не входить в FORTRAN пока;-)]. Поэтому, если вы хотите продолжить научное программирование через свой переход на Python, и ваши программы, как правило, связаны с шиной памяти и процессором, делая огромные количества хрустов (миллиарды операций), тогда вам может понравиться знать, как сбежать на C, если вам когда-нибудь понадобится. Считайте, что это последнее средство.

Вам нужно понимать Python достаточно хорошо, прежде чем API Python/C имеет смысл.

О да, и если вы хотите понять OOP в целом, вспомните позже, чтобы взглянуть на что-то вроде Java, Objective-C, С++ или D. Python - это не просто язык OO, это динамический OO язык. Возможно, вы не понимаете этого, сравнивая только C с Python, но динамические и статические типы являются полностью независимой проблемой OOP-ness Python. Объекты Python похожи на hashtables, которые позволяют добавлять новые поля волей-неволей, но объекты во многих других языках OO хранят данные способами, которые намного больше похожи на C struct.

Ответ 2

Я узнал все, что знаю о Python, из официальной документации: http://docs.python.org/

И это бесплатно.

Ответ 3

погружение в python - это хорошее место для запуска

запускает интерпретатор, IPython даже лучше, чем простой интерпретатор Python

используйте dir() и help(), чтобы совать вокруг

и не забудьте прочитать официальные документы хотя бы раз

Ответ 5

Diveintopython, официальные документы "Learning python" Марка Лутца (4-е издание) - одна из лучших книг.

Ответ 6

Если у вас есть фон программирования, Python довольно просто подбирать. Самой обременительной задачей является изучение библиотек и идиом. Документация на python.org неплоха и бесплатна. Если вы делаете хруст числа, вы почти наверняка захотите ознакомиться с расширением numpy.

Ответ 7

Как человек, который работал с Java более 12 лет, я обнаружил, что выбор проблемы и решение ее на новом языке - лучший способ узнать. Я не верю в чтение - он тратит огромное количество времени, и вы можете легко закончить чтение слишком долго.

Мой совет - найти проблему и отправиться решать ее с помощью Python. Вы будете многому научиться в этом процессе.

Удачи.