python:Python for .NET

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_39363022/article/details/88353270

前言

Python for .NET 是一个可以让 Python 程序员近乎无缝的集成 .NET 通用语言环境 CLR 和以及为 .NET 开发者提供一个强大的应用脚本工具。通过这个项目你可在 .NET 中完全使用 Python 来编写整个应用,使用 .NET 服务和组件。

这个包并没有用 CLR 语言实现一个 Python,也不将 Python 代码生成受管代码 (IL),只是在 .NET 环境中集成了 C Python 引擎。

示例代码:

from System.Collections.Generic import Dictionary
from System import *

dict1 = Dictionary[String, String]()
dict2 = Dictionary[String, Int32]()
dict3 = Dictionary[String, Type]()

小编推荐一个学python的学习qun 740,3222,34
无论你是大牛还是小白,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!

素材来源于网络:侵删

展开阅读全文

转贴:可爱的 Python:JPythonPython for .NET 内幕

03-12

采访创始人rnrnDavid Mertz, Ph.D. rn总裁,Gnosis Software Inc. rn2000 年 12 月rnrn内容: rn rn rn Python for .NET rn JPython rn 参考资料 rn 关于作者 rn rnrnrnDavid Mertz 采访了 JPython 和 Python for .NET 的开发者 Mark Hammond、Finn Bock 和 Barry Warsaw。他从 Mark 那里了解到一些有关微软开发的最新独家新闻内幕(当然所有内容都在保密合同限制内),并从 Finn 和 Barry 那里了解到有关 JPython 和他们将要发布的 Jython 项目的一些信息。rnrn尽管 Python 通常等同于 CPython,但它的规范曾在其它地方实现过多次,包括在用于 Java 和 .NET 的应用程序中。JPython 将 Python 源码编译成 Java 字节码,并提供了对 Java 类的透明访问。Python for .NET 是微软将要发布的交叉语言技术平台工作中的一个应用。在采访 Mark Hammond、Finn Bock 和 Barry Warsaw 的过程中,我发现了有关 JPython 和 Python for .NET 是如何开发的更多信息,以及为未来这些替代 Python 实现进行了哪些准备。rnrnPython for .NETrn由于在 PythonWin 环境和 PythonCOM 扩展方面出色的开发,Mark Hammond 为广大 Python 程序员所熟知。出于我们钦佩 Mark 的相同原因,微软也很看重他。他们决定在 Python for .NET 的实现上向他求助。据 Mark 称,Python for .NET 的工作版本应该很快就可得到,现在您应该已经可以从 ActiveState 获得它的 alpha 或 beta 版(请参阅参考资料)。rnrnDavid Mertz:到底什么是 Python for .NET 呢?我想我特别想知道的是 Python for .NET 与您自己对 CPython 的 PythonWin 和 PythonCOM 扩展(它们似乎能够控制 Windows 的内部)之间的关系是怎样的。rnrnMark Hammond:Python for .NET 是一种编译器和运行时,它在微软的 .NET 平台上实现了 Python。.NET 平台提供了一个运行时和元数据系统,它们设计成允许完整的语言互操作性,但要实现这一点,语言必须能在该运行时中使用。rnrn例如,如果 Python 类是公用的以便 Visual Basic 程序员能够继承它,Python 类就必须以 .NET 术语而不是以 CPython 术语来实现和描述。rnrnPython .NET 的优点只是可以与 .NET 框架互操作。这里仍然有许多缺陷,主要由于实现还不成熟而导致。但这确实只是时间的问题。我们仍处于开发和调试的 beta 阶段。rnrnMertz:您对现在的 Python for .NET 和 CPython 之间不兼容性问题是怎么看的?rnrnHammond:是啊,大多数模块还没有被实现,所以现有以 C 编写的模块还无法确切使用。如果您的目标不是 .NET 框架,最好此时不要使用 Python .NET。rnrnMertz:不过,Python for .NET 肯定有一些主要的优势,例如方便的语言间通信和多语言应用开发。但为什么您说比已经有的那些 -- 例如 Python+C+SWIG 要好呢(当然是假设情况)。rnrnHammond:就 Python+C+SWIG 目前的发展而言,应该是明显的。语言间调用永远不应该象使用 Python+C+SWIG 那样困难。但 SWIG 在许多其它方面是个了不起的产品。它揭开了 Python C 扩展编写的神秘面纱,并仅将它归到困难的行列。rnrn将 .NET 与 COM 或 Corba 进行比较更合理一些。COM 和 Corba 都提供交叉语言调用“正适用”的解决方案,而不需要任何手工参与或编译。.NET 将它更进了一步,并提供交叉语言继承和异常能力。这些优点非常类似于在 Java 虚拟机下的多语言实现中发现的那些。rnrnMertz:Python for .NET 将 Python 脚本编译成外部虚拟机的格式。对于 .NET VM 是否将支持 Stackless 和 Vyper 的某些外来特性,例如延续性、生成器、协同程序、尾递归或延缓求值,您认为会这样吗?rnrnHammond:是的,从理论上说它会。但微软 Beta 协议的一些条款不允许我谈论有关性能的问题。让我们将目标只定在核心 Python 语言引用中定义的那些特性上。无用信息收集是继承的,就象在 JPython 和 JVM 中的那样。rnrnMertz:接下来谈谈政策主题,您认为微软为什么正在进行 Python for .NET 的开发工作呢?rnrnHammond:这样选择目标 .NET 的人就可使用 Python 了。微软很早就确定要参与到 Python 和其它许多语言中,以确保他们的 VM 确实是不懂语言也能够使用的。根据来自各种语言实现者的反馈意见,现在他们已经对他们的 VM 做了大量更改。rnrnMertz:那么 Python for .NET 的财务关系是怎样的?您付费给他们吗?或者他们付费给您?rnrnHammond:关于构建 Python for .NET,Greg Stein 和我与微软签有合同。该合同的条款是机密的。但我基本上为 ActiveState(Perl for .NET 实现)工作。为完成移植,我希望他们最终能与微软签定类似的合同。 rnrnMertz:这对于 Python for .NET 附带的许可证条款方面意味着什么呢?rnrnHammond:它将附带 "(c) Microsoft" 说明,但它一定是可免费使用的。rnrnMertz:我一直在担心微软会尝试使用与“采用、扩展、废除”策略类似的专用扩展和增强。换句话说,我恐怕 Python for .NET 无法长期对 Python 真正有利。rnrnHammond:如果 .NET 成为一个很重要的力量,那么针对它的 Python 实现就有助于 Python,与针对 JVM 的 JPython 有助于 Python一样。rnrnJPythonrn尽管 JPython 是一个真正面向社区的成果,但 Barry Warsaw 和 Finn Bock 是当前两名最活跃的 JPython 开发者。不幸的是,JPython 最初的开发者 Jim Hugunin 不再从事其开发了。在我的网站上有关于该采访未作删节(技术性更强)的版本(请参阅参考资料)。rnrnDavid Mertz:究竟什么是 JPython?rnrnBarry Warsaw:我将用标准的营销说法来回答这个问题。 rnrnJPython 是 Python 编程语言的 100% 纯 Java 实现。它可以让用户将 Python 源代码编译成 Java 字节码,并在任何 Java 虚拟机上运行产生的字节码。它是与 Java 的最无缝最平滑的集成。您可以从 Python 访问所有 Java 库、构建 Applet、与 Java Bean 集成以及从 Python 中的 Java 类创建子类,反之亦然。JPython 类似于 Python 而不象 Java,它可以交互使用;只需在提示上输入一些 JPython 代码就能立刻看到结果。rnrn用更简单的话来说,JPython 可以为任何一个您需要的 Java 代码编写脚本,这样转换出的代码行数比原来要少上 2 到 10 倍。因为 Python 是动态输入的语言,所以可以更快速地开发错误更少的应用,并得到灵活得多的程序。rnrnMertz:有关 JPython 的开发是如何开始的呢?rnrnWarsaw:JPython 是由 Jim Hugunin 发明的,他现在为 Xerox PARC 的 Aspect Oriented Programming 项目工作。我了解 Jim,他可能主要是对挑战感兴趣。Python 领域中有许多人都认为这是不可实现的。Guido 自己就是一个怀疑论者。Jim 证明他们都错了!rnrn那么既然遇到挑战,为什么还要继续开发 JPython 呢?因为它是大多数 Java 程序员不太了解的最有价值的 Java 工具。到目前为止!rnrnMertz:您认为是什么刺激了 JPython 的需求?rnrnWarsaw:首先必须理解 JPython 不是 Java 的竞争对手;而是对它的最好补充。Java 是静态输入的编译语言。这确保了库的输入很安全并且执行速度更快。有一个现象很有趣,就是尽管它是字节码翻译的,但大多数人还是将 Java 看作一个传统的“编写-编译-运行-编辑”的程序。当然,Java 利用了软件世界的绝大部分,因此对于 Java 程序员有许多资源可用。rnrn但相同的静态输入和传统的编程周期在人力资源方面增加了 Java 应用开发的成本。Python 在这方面绝对胜出。因为 Python 是一种小而简单的语言,所以非常易于掌握。大多数有经验的程序员可以在大约一天的时间内就学习到足够的 Python 知识来提高生产力。Python 的设计思想就是代码的读比写要多得多。因此 Python 源代码易于在大型团体项目中共享。rnrn但更重要的是,Python 是非常高级的动态输入型语言。这表现在大大节约了执行任务所需的代码数量。因为使用 Python 所写的代码行数较少,可以写得更快,错误更少。对于快速应用开发这简直太棒了。rnrnPython 还提供一个交互式解释器,这意味着您可以坐在解释器提示,导入 Java 代码,创建 Java 类实例,进行方法调用等等,所有这些都是交互式的。这在训练程序员如何使用公司 Java 库或者试验新 Java API 时是一种绝佳工具。rnrn但以我拙见,所有程序员都应该备有 CPython 和 JPython。rnrnMertz:照您看,JPython 比 CPython 好在哪里呢?rnrnBock:JPython 提供了对其底层实现语言的完整访问。在大多数(可能所有)基于 C 的脚本语言中,C 函数必须封装在用来将 C 函数暴露给脚本语言的一层简单的代码中,这里存在一些好的工具,例如 SWIG,来将这个封装器代码的创建自动化。但 JPython 根本就不需要封装器。所有曾经编写过的 Java 代码都可直接从 JPython 使用,集成是双向的。以 JPython 定义的类和实例可以传递给 Java,就如同它们是一般的 Java 类和实例那样(它们也确实如此)。rnrn嵌入/扩展 API 使从应用程序或模块中对 JPython 对象的访问相当精确。这一优点部分来自于 JPython 和 Java 都是面向对象的语言这一事实。Jim 利用了该事实的这一重要优点。rnrnWarsaw:CPython 欠缺的是对世界上大量 Java 代码的访问。如果需要使用 Java 库,JPython 就是答案。反过来说,当然,JPython 也没有对世界上所有现有 C 库的简易访问。Finn 已完成了通过 JNI 集成如 Tkinter 和 POSIX 模块这类事物的工作,但那些在 JPython 中总是非标准的,因为我们希望保留 100% 纯 Java 认证。rnrnMertz:依您所见,JPython 的缺点有哪些呢?rnrnFinn Bock:JPython 只提供对 Java 代码的访问,而不提供对所有现有 C 模块的访问。因此每个以 C 实现的 Python 模块都必须用 Java 重新实现。而 CPython 则有许多模块。rnrn另外,对于嵌入/扩展 API,除了源代码之外没有任何文档。rnrnMertz:您是否在寻找 JPython 优于纯 Java 的优点?rnrnWarsaw:我想我们已经谈了许多这方面的内容。但现在让我们谈谈 JPython 的性能问题。因为 JPython 实现了 Python 的动态语义,所有 JPython 带有相当广泛的运行时。这对于某些应用程序有性能影响。0 论坛

Python + .Net 幸福的程序员们!!

09-30

一直期待 IronPython,但今天发现了另外一个东东,着实让我高兴了半天。rnrnPythonNet , 现在版本是 1.0beta3rnrn安装试用,执行了它带的例子程序, 简直是太棒了: rnrnrn一直发愁Python下面好用的图形界面,现在dotNet CLR 都可以使用了,幸福啊。rn至于跨平台, Mono 应该可以的。rnrn关注, 继续看。rnrn另外,这套实现里,还带了 C# 的源代码,这个Python的解释器是C#的,也值得研究一番rnrn---------------rn# Copyright (c) 2001, 2002 Zope Corporation and Contributors.rn#rn# All Rights Reserved.rn#rn# This software is subject to the provisions of the Zope Public License,rn# Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution.rn# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIEDrn# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIEDrn# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESSrn# FOR A PARTICULAR PURPOSE.rnrnimport CLR.System.Windows.Forms as WinFormsrnfrom CLR.System.Drawing import Size, Pointrnrnrnclass HelloApp(WinForms.Form):rn """A simple hello world app that demonstrates the essentials ofrn winforms programming and event-based programming in Python."""rnrn def __init__(self):rn self.Text = "Hello World From Python"rn self.AutoScaleBaseSize = Size(5, 13)rn self.ClientSize = Size(392, 117);rn h = WinForms.SystemInformation.CaptionHeightrn self.MinimumSize = Size(392, (117 + h))rnrn # Create the buttonrn self.button = WinForms.Button()rn self.button.Location = Point(256, 64)rn self.button.Size = Size(120, 40)rn self.button.TabIndex = 2rn self.button.Text = "Click Me!"rn rn # Register the event handlerrn self.button.Click += self.button_Clickrnrn # Create the text boxrn self.textbox = WinForms.TextBox()rn self.textbox.Text = "Hello World"rn self.textbox.TabIndex = 1rn self.textbox.Size = Size(360, 20)rn self.textbox.Location = Point(16, 24)rn rn # Add the controls to the formrn self.AcceptButton = self.buttonrn self.Controls.Add(self.button);rn self.Controls.Add(self.textbox);rnrn def button_Click(self, sender, args):rn """Button click event handler"""rn WinForms.MessageBox.Show("Please do not press this button again.")rnrn def run(self):rn WinForms.Application.Run(self)rnrnrndef main():rn HelloApp().run()rnrnrnif __name__ == '__main__':rn main()rn 论坛

没有更多推荐了,返回首页