Ответ 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
.