В вашей ситуации совершенно разумно изучать IronPython (тем более, что эта книга делает большую работу, помогая вам в этом!). У вас будет доступ практически ко всем функциям Python 2.5 (не уверен, когда IronPython обновится до версии Python 2.6, но 2.5 уже вполне пригоден для использования), плюс всех известных вам библиотек и сборок .Net. и любовь, и инструменты, такие как надстройки Visual Studio.
Различия между CPython и IronPython (и Jython, в этом отношении, который применяет ту же концепцию, что и IronPython, к JVM - Джим Хугунин был создателем Jython задолго до того, как он перешел в Microsoft, где он создал IronPython, оба проекта теперь) thrive) в основном занимаются сборкой мусора и многопоточностью: IronPython и Jython полагаются на свои базовые платформы (таким образом, вы получаете сборку мусора по меткам и зачисткам и бесплатную многопоточность), CPython катит свою собственную (так что это в основном GC с подсчетом ссылок, с время от времени помечайте и убирайте, чтобы разрешить ссылочные циклы и поточная обработка затруднена глобальной блокировкой интерпретатора).
Хорошо закодированный скрипт Python не полагается на детали реализации, о которых идет речь (он никогда не предполагает, что GC происходит немедленно, никогда не предполагает, что операция является атомарной при многопоточности, за исключением тех немногих, как методы Queue.Queue, которые явно задокументировано), но, конечно, в дикой природе есть множество скриптов, которые неаккуратны. Например:
data = open('x.txt').read()
это оставляет файловый объект открытым, пока он не будет собран мусором; в среде подсчета ссылок сбор происходит немедленно (поэтому файл закрывается как можно скорее), в среде разметки и разметки это не так (поэтому процесс, использующий такие конструкции, часто ошибочно сохраняет некоторые файлы, возможно, много файлов, бесполезно открываются гораздо дольше, чем нужно, тратя системные ресурсы и т.) *
Итак, правильное Вместо этого используется код Python:
# needed in 2.5, unneeded but innocuous in 2.6
from __future__ import with_statement
with open('x.txt') as f: data = f.read()
, который делает гарантирующим немедленное закрытие файла в каждой реализации (оператор with
очень удобен для этого; -).
Это не влияет на ваше изучение Python и не препятствует повторному использованию правильно кодированного кода Python, но если и когда вы захотите повторно использовать код Python с неаккуратным кодированием (особенно в долго работающем сервере, сервисе, демоне) процесс, и в) вам, возможно, потребуется в будущем его ужесточить. Так, между прочим, будут ли люди, которые хотят использовать более новые и лучшие версии CPython, такие как Unladen Swallow & c, как только эти версии реализуют более совершенные механизмы сборки мусора, избавятся от GIL и других улучшений; надеюсь, это уже меняет «культуру» сообщества Python в сторону более правильного, менее неаккуратного кодирования, но, конечно, вокруг исчисляется несколько миллиардов строк старого неаккуратного кода, поэтому требуется некоторая осторожность; -).