.net – IronPython与原始Python的比较.我对第一个有什么期望?

前端之家收集整理的这篇文章主要介绍了.net – IronPython与原始Python的比较.我对第一个有什么期望?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我希望学习Python,但我整天都在.Net作为C#开发人员工作,所以我决定下载并安装IronPython和集成的IronPython工作室.它与原始Python有何不同或相似之处?作为.Net开发人员,我可以期望在.Net环境中运行传统的Python脚本没有问题,或者这只是旧的迁移乌托邦?我能期待什么?

提前致谢.

编辑:Dic. 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的创始人,在那里他发起了IronPython,两个项目现在都茁壮成长)主要是垃圾收集和线程化:IronPython和Jython依赖于他们的底层平台(因此,你得到了标记和清除垃圾收集和免费线程),CPython自己推出(因此,它主要是引用计数GC,带有mark-and – 偶尔扫描一下来解决引用循环,并且线程受全局解释器锁的阻碍).

一个编码良好的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)您将来可能需要对其进行一些收紧.那么,顺便说一句,那些想要使用更新更好的CPython版本的人,比如Unladen Swallow& c,一旦这些版本实现更好的垃圾收集机制,摆脱GIL和其他增强功能;希望这已经将Python社区的“文化”改变为更正确,更少草率的编码,但当然还有大量旧的草率代码,所以需要一些小心;-).

猜你在找的Python相关文章