Iron Python:Iron Python有哪些好的用途?

30

我很喜欢Python,但我在.NET环境中工作,因此我正在研究Iron Python,并想知道它的用途。

您能用它编写应用程序吗?还是用于向应用程序添加脚本语言?

你们如何使用它?


你在http://www.python.org网站中哪一部分感到困惑?它似乎提供了Python的很好概述。也许你可以提供具体的引用或链接,说明让你感到困惑的事情。 - S.Lott
12个回答

31

要么两者皆可 :)

我不会声称我知道 IronPython 的特定 "目的",但它肯定可以用于编写应用程序,并且可以用于在较大的 .NET 应用程序中进行脚本编写。

除此之外,它是一个方便的方式,可以让 Python 开发人员逐渐进入 .NET 世界。 (为什么不同时学习 C#?来吧,水很好...)


1
自从2.0以来,我一直在使用C#进行编程,而Python只是我学过的第一种语言,而且你永远不会忘记你的第一次... - Master Morality
23
请进来,水很好,但里面有一条巨蟒!太好了。 - Tim Pietzcker

13

IronPython最大的好处是将Python和.NET世界紧密结合在一起。

如果您有用C#编写的库(程序集),您可以直接导入它们到IronPython中并使用它们,就像这样:

import clr
clr.AddReferenceToFileAndPath('MyAssembly.dll')

import MyNamespace

c = MyNamespace.MyClass()

c.MyFunction()

IronPython是一种很好的方法,可以重用现有的.NET代码进行脚本编写,甚至与IronPython解释器进行交互使用。

普通的CPython需要使用Python .NET来实现类似功能。根据我的经验,Python .NET大部分时候都有效,但并非总是如此,因此IronPython在从Python中访问.NET方面提供了更加完善的体验。

相比标准库支持等方面,IronPython可能始终落后于CPython参考实现,但总体而言,开发进度并不会远落后于CPython,因此从CPython背景下使用IronPython并不困难。

最后,CPython和IronPython之间存在一些显著的区别,需要注意。例如,垃圾回收(前几天我就碰到了这个问题...)。


我认为这是测试代码、测试代码可用性并避免发布无用内部功能以毫无理由地玷污遗留代码的最佳方式。 - Mitzi

8
IronPython和WPF是我所知道的设计GUI最高效的方式。下图中几乎所有应用程序都是用IronPython编写的,只有很少部分出于性能原因使用C#或C++ / CLI。
当然,您会错过一些WPF / C#集成,但在生产力方面,您会获得更多收益。
IronPython也比CPython更容易扩展。您可以将C ++代码添加到小型C ++ / CLI包装器中。CPython没有任何东西可以像这样轻松。这就是我开始使用IronPython的原因,因为我厌倦了在CPython中编写我的C ++代码的包装器。 Boost.Python、SWIG等工具对我来说不起作用。

2
这个应用看起来非常有趣。它结合了WPF和生产力。能否进一步详细说明一下呢?例如,有没有关于这个主题的教程? - liang

6
  • IronPython是另一种Python实现。您可以在任何其他Python实现可用的地方使用它(当然,除非有平台限制 - 显然,您无法在仅支持Java的设备上使用IronPython)。
  • IronPython只是另一种.NET编译器。您可以在任何其他.NET语言可用的地方使用它。
  • IronPython不仅仅是另一种Python实现。它是一种Python实现,可以让您完全访问任何.NET库。
  • IronPython不仅仅是另一种.NET编译器。它是一种.NET编译器,可以让您完全访问任何Python库。
  • IronPython是一个可嵌入的脚本引擎,适用于任何.NET应用程序、库和框架。

4
我们将其作为嵌入式语言在我们的软件中使用。 我曾在我的博客上发表过一篇文章,但最近换了一个系统。您可以在此处找到存档版本(其中包含损坏的图像链接):
我们的现场工程师现在使用嵌入式语言来实时测试各种东西,我们的质量保证人员使用它创建小型脚本来测试硬件的所有功能等等...
希望这有所帮助。

4
我认为Iron语言家族主要是为了为平台添加更多的风味,使您可以使用熟悉的语言进入.NET。这大大降低了各种背景的新人进入.NET的门槛。
尽管语法类似于Python,但实现仍然建立在CLR之上,如果您决定选择IronPython项目而不是C#项目,最终产品不会有太大的区别。
我有一些IronPython的经验,并且发现它很好用(当然,我真的很喜欢这种语言有所帮助)。微软现在已经将IronPython视为一流公民,当您使用它时,也会有这种印象。使用它的一个缺点是它没有被广泛采用,这导致在协作和长期维护代码库方面存在一些问题。
当我进行搜索算法的.NET移植时,我发现它特别有用,因为该算法最初是使用Python实现的。
关于向应用程序添加脚本功能,这可能不是IronPython的最初意图,但确实已经完成了。Umbraco CMS具有(或至少曾经有)使用Python作为动态脚本语言创建小部件的能力。这是一个相当不错的功能。
您应该尝试一下...拥有更多工具总是好的 :)

2
你可以使用IronPython编写在.NET平台上运行的Python代码,它适用于Python擅长的任何领域。
Python语言本质上是一样的,无论在哪里。 IronPython是该语言运行时的实现 - 支持代码将源代码编译后创建一个虚拟机来执行结果中的字节码文件(.pyc),并与操作系统通信以将命令行参数放入sys.argv,等等其他有趣的事情。(好吧,实际上.NET平台自己也做了很多工作。 :))

2

我的IronPython经验是将其用作引擎的一部分,可以在安装基本的.Net应用程序后进行更改。借助Python,我们描述了真正庞大的业务规则集,可以从两个系统安装中进行更改。 IronPython部分地被用作插件语言。

与脚本语言的区别在于,IronPython在编译后作为CLR代码执行。


2
首先,IronPython实际上更像是一个编译器而非一个解释器——它将用于从你的Python源文件生成.NET程序集。因此,是的,你可以编写应用程序和大多数.NET框架可以完成的任何任务。
IronPython最大的好处之一是它几乎没有全局解释器锁(GIL),这意味着如果你同时编写Python代码并且它是多线程的,你通常可以获得比CPython更好的性能,而无需跨边界生成多个进程和pickle对象。它不能解决并发问题,但.NET提供了更强大的结构来处理它。我认为这相当小众,但它确实存在。 python.org的维基页面列出了一些关键区别,详见IronPython

1

你可以在其中编写应用程序,也可以将其用作应用程序中的脚本语言。

它用于访问现有的Python库,并且如果需要,在Python中编写代码的某些部分,如果.NET语言似乎不太适合该工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接