我想学习Python,但是作为C#开发人员,我整天在.Net中工作,因此我决定下载并安装IronPython和集成的IronPython studio。它与原始Python有何不同或相似之处?作为.Net开发人员,我可以期望在.Net环境中正常运行常规Python脚本吗,或者这与旧的迁移乌托邦一样?我能期待什么?

提前致谢。

编辑:骰子。 2009年-IronPython最近已升级到2.6。如果可能,请升级您的答案。

最佳答案

在您的情况下,研究IronPython是完全合理的(尤其是this book在帮助您做到这一点方面做得很好!)。您将基本上可以使用Python 2.5的所有功能(不确定IronPython何时升级到2.6版本的Python,但2.5已经相当可用),以及所有您知道和喜欢的.Net库和程序集,以及诸如此类的工具作为Visual Studio加载项。

CPython和IronPython之间的差异(就此而言,Jython将与IronPython相同的概念应用于JVM - Jim Hugunin是Jython的创始人,在他移居Microsoft创立IronPython之前,这两个项目现在都很兴旺)主要在垃圾收集和线程处理方面:IronPython和Jython依赖于它们的底层平台(因此,您可以进行标记清除垃圾收集和自由线程处理),CPython可以自己滚动(因此,它主要是引用计数的GC,带有标记和-偶尔扫描以解决引用循环,并且线程受全局解释器锁的阻碍)。

一个经过良好编码的Python脚本不会依赖所讨论的实现细节(它永远不会假设GC立即发生,永远不会假设一个操作在线程下是原子的,除了少数文件(例如Queue.Queue的方法)已明确记录为: ),但当然还有很多草率的脚本。例如:

data = open('x.txt').read()

这将使文件对象处于打开状态,直到对其进行垃圾回收为止;在引用计数环境中,收集会立即发生(因此文件会尽快关闭),在情况并非如此的情况下,标记收集工作会立即进行(因此,使用此类构造的过程通常会错误地保留一些文件,也许很多文件,无用的开放时间远远超过了他们需要的时间,浪费了系统资源(&c)。

因此,正确的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代码(尤其是在长时间运行的服务器,服务,守护程序,&c中) ),您将来可能需要收紧它。因此,顺便说一句,一旦那些版本实现了更好的垃圾收集机制,摆脱了GIL和其他增强功能,想要使用更新和更好的CPython版本(例如Unladen Swallow&c)的人们将可以使用;希望这已经在改变Python社区的“文化”,使其朝着更正确,更少草率的编码发展,但是当然,周围有成千上万的旧草率代码行,因此需要加倍小心;-)。

关于.net - IronPython与原始Python的比较。我对第一个有什么期望?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1650898/

10-16 19:29