Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net IronPython与原始Python的比较。我能从第一个中得到什么?_.net_Python_Comparison_Ironpython_Ironpython Studio - Fatal编程技术网

.net IronPython与原始Python的比较。我能从第一个中得到什么?

.net IronPython与原始Python的比较。我能从第一个中得到什么?,.net,python,comparison,ironpython,ironpython-studio,.net,Python,Comparison,Ironpython,Ironpython Studio,我希望学习Python,但作为一名C#开发人员,我整天都在.Net中工作,所以我决定下载并安装IronPython和集成IronPython studio。它与原始Python有多大的不同或相似?作为一名.Net开发人员,我能指望在.Net环境中运行传统的Python脚本而不出任何问题吗?或者这只是一个古老的迁移乌托邦?我能期待什么 提前谢谢 编辑:Dic。2009年的今天,IronPython最近已经升级到2.6。如果可能,请升级您的答案。大多数python脚本在IronPython中工作得非

我希望学习Python,但作为一名C#开发人员,我整天都在.Net中工作,所以我决定下载并安装IronPython和集成IronPython studio。它与原始Python有多大的不同或相似?作为一名.Net开发人员,我能指望在.Net环境中运行传统的Python脚本而不出任何问题吗?或者这只是一个古老的迁移乌托邦?我能期待什么

提前谢谢


编辑:Dic。2009年的今天,IronPython最近已经升级到2.6。如果可能,请升级您的答案。

大多数python脚本在IronPython中工作得非常好

以下是最新版本中的一个示例


只要您的脚本不依赖于这些,它就很可能在没有更改的情况下工作。然而,IronPython的许多“功能”实际上是通过将脚本迁移到使用.NET framework类而不是python标准库来发挥的。

在您的情况下,学习IronPython是完全合理的(尤其是在帮助您完成这项工作的同时!)。您将可以访问基本上所有的Python 2.5功能(不确定IronPython何时会升级到Python的2.6版本,但2.5已经非常可用),加上您所知道和喜爱的所有.Net库和程序集,以及诸如Visual Studio插件之类的工具

CPython和IronPython之间的区别(就这点而言,Jython将与IronPython相同的概念应用于JVM——Jim Hugunin是Jython的创始人,早在他搬到微软开发IronPython之前,这两个项目现在都很繁荣)主要在垃圾收集和线程方面:IronPython和Jython依赖于它们的底层平台(因此,您可以获得mark and sweep垃圾收集和免费线程),CPython也有自己的平台(因此,它主要是引用计数GC,偶尔使用mark and sweep来解决引用循环,线程受到全局解释器锁的阻碍)

一个编码良好的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版本的人,比如unladenswallow&c,一旦这些版本实现了更好的垃圾收集机制,就会摆脱GIL和其他增强功能;希望这已经改变了Python社区的“文化”,使其朝着更正确、更不草率的编码方向发展,但当然,有成千上万行旧的草率代码,因此需要注意;-)

Dic。2009年:IronPython最近升级到了2.6