[翻译] python Tutorial 之一

     声明:本文做为IronPython-2.0 B3的Tutorial 中文译文,内容全部来自其英文原文,

其中本人认为存在疑问的或翻译不当之处会用原文中的内容加以标记,且本文内容完全用于研

究和学习IronPython 之用,限于本人英文翻译功底有限,如有错误,欢迎大家批评指正。


     原文链接如下:http://www.cnblogs.com/daizhj/articles/1245093.html

 

Introduction

 

     IronPython 作为 Python 语言在.net平台上的实现(www.python.org),它是一种动态

语言且支持许多编程范例[paradigms] ,诸如面向对象,也允许您使用.net代码进行编译。


     本tutorial的目标就是使您快速熟悉IronPython 控制台(console),并向您展示如何有

效的使用扩展(extensive).net库。这个 tutorial同时还会展示如何从一些特殊领域入手,

这些领域诸如COM的内部操作,用C#扩展 IronPython ,以及嵌入式的IronPython 等。当

然本tutorial决不是针对Python语言自身进行介绍,如果您想查阅这方面的资料,我们推荐您

去www.python.org  或 看一下由Mark Lutz 与 David Ascher 合著的“Learning Python”
这本书。



      本tutorial所需要的运行环境如下:

  • Microsoft .NET Framework Version 2.0 Redistributable Package (x86)
    • Required to run IronPython.
    • Download from here.
    • 译者注:本人机器上是.net3.5,也可运行部分的示例,所以大家不必非要下载2.0
  • .NET Framework 2.0 Software Development Kit (SDK) (x86)
    • Required for the COM interoperability, extending and embedding tutorials.
    • Download from here.
  • Microsoft WinFX Runtime Components (Avalon)
    • Required for "Advanced IronPython" and "Embedding IronPython" tutorials.
    • Download from here.
  • Mapack (example assembly found on the internet)
    • Required for the "Basic IronPython" tutorial, exercise "Loading .NET Libraries".
    • Download Mapack from here (direct link to the Mapack.zip download is here).
    • Extract Mapack.dll from the zip file directly into the Tutorial directory.

     译者注:如果您本机上安装的是vs2008 RTM(笔者的开发环境),那么你就可以跳过上面的几个安装

直接进入到下面的正文了,而如果您安装的是vs2005,那么请您检查相应的条件是否已不足。

 

     本tutorial假设IronPython的发布包已被解压缩至C:\IronPython. 请注意您个人的安装可能会存在

一定的差异。


     本tutorial假设您将会使用IronPython 控制台功能。将tutorial指导您从tutorial目录启动控制台程

序时,您应该定位到tutorial目录下(>cd c:\ironpython\tutorial) ,并运行控制台程序(>..\ipy.exe)。

 

      译者注:ipy.exe可以下面链接中直接下载,我这样做主要是觉得园子里有些朋友可以只是想了解并试

用一下,并不想下载那个IronPython的源码包或相应的sdk等资源。

     好了,让我们开始正文吧。

 

 

Tutorial 1: 基本IronPython应用

 

     本章节主要强调的是IronPython的interpreter ,以及与.NET 类库的互动场景(environment )

     本章节阅读大概需要30分钟

     The objective of this tutorial is to launch the IronPython interpreter, explore the environment

of the interactive console and use IronPython to interact with .NET libraries.

     The exercises in this tutorial are:

  • The IronPython interactive console

  • Using the standard .NET libraries from IronPython

  • Loading additional .NET libraries

练习 1: IronPython 交互控件台

In this exercise, you will start the IronPython interactive interpreter and perform simple tasks

to become acquainted with the IronPython environment. If you are familiar with using the Python

interactive console, the import statement and exploring the Python interactive environment using

dir() function and __doc__ attribute, you can skip this exercise.

任务 1: IronPython console

  1. 从本Tutorial的路径下启动IronPython console(c:"ironpython"ipy.exe)。它将如在DOS窗口
    下出现如下提示

IronPython 1.0 on .NET 2.0.50727.42
Copyright (c) Microsoft Corporation. All rights reserved.

>>> _

  1. 运行下面的内容(在每一条内容之后,按下回车键都会打印(prints)一条结果)。

2+2

print "Hello World!"

for i in range(3): print i

x = 10

print x

 

       运行完上面操作后,控制台窗口将会显示如下内容:

 

>>> 2+2

4

>>> print "Hello World!"

Hello World!

>>> for i in range(3): print i

...

0
1
2

>>> x = 10
>>> print x

10

>>>

  1. IronPython 控制台支持多行声明(multi-line statements),这经常要进行函数定义:

...

       Unlike C# or Java, where blocks of code are grouped by curly brackets "{...}", blocks

of code in Python are grouped based on their level of indentation.  Every new block of code

must be indented one more level than the previous block of code.  Blocks of code are used

for function and class definitions as well as 'if' statements and loops.

 

    

      例如:定义“add”方法(注:你需要在return 之前敲入空格符):

 

     return a + b

 

      要完成函数定义,按下Enter键。

 

add(3, 2)

add("Iron", "Python")

 

      完成这一步后,控制台内容如下:

 

>>> def add(a, b):
...     return a + b
...
>>> add(3, 2)

5

>>> add("Iron", "Python")

'IronPython'

>>>

 

  1. 要退出控制台程序,按下Ctrl+Z 并回车即可(alternatively, press F6 followed by Enter).

^Z

Task 2: 内置模块和交互式探查(interactive exploration)

  1. 从tutorial路径启动IronPython 控制台 (see Introduction for details).

  2. 使用内置dir() 函数, 列出IronPython 环境的内容:

dir()

        控制台显示如下:

 

>>> dir()

['__builtins__', '__doc__', '__name__']

  1. IronPython 有几个内置模块,经常使用的是"sys". 引入"sys" 模块使用 "import" 声明:

import sys

  1. Python 引入声明与 C# 的 "using" 或Visual Basic的"Imports"声明相似。
    The important difference is that the C# and VB statements bring the names from the
    imported namespace into the global namespace to be accessed directly. Python’s import
    doesn’t do that.
    要访问引入模块的名称和属性, 使用module名称的前缀:

sys.version

  1. 使用dir()方法去显示环境:

dir()

改变环境 (global namespace), 现在它包括"sys" 模块:

>>> dir()

['__builtins__', '__doc__', '__name__', 'sys']

  1. 使用dir() 方法来显示"sys" 模块的内容:

dir(sys)


  1. 打印出 "sys" 模块属性的一些值:

sys.path


sys.executable


Task 3: 外部 Python 模块

本任务使用 "first.py" (文件)模块位于Tutorial 路径.

  1. 声明 "first.py" 模块(您可以运行在Tutorial 路径下的ipy.exe,“first”将位于sys.path路径下):

import first

  1. 用dir()函数显示"first" 模块:

dir(first)

>>> dir(first)

['__builtins__', '__file__', '__name__', 'add', 'factorial', 'hi']

  1. 为打印 "add" 和 "factorial" 函数文档内容,使用__doc__属性:

first.add.__doc__

first.factorial.__doc__

 

       __doc__属性可用于显示 .NET 方法和它们的参数类型。

 

>>> first.add.__doc__

'add(a, b) - returns a + b'

>>> first.factorial.__doc__

'factorial(n) - returns factorial of n'

  1. 调用 "first" 模块方法并打印“hi”属性内容

first.add(1,2)

first.factorial(5)

first.hi

 

       输出内容为:

>>> first.add(1,2)

3

>>> first.factorial(5)

120

>>> first.hi

'Hello from IronPython!'

  1. 在控制台下Ctrl+Z 或 F6 按回车退出。

Exercise 2: 使用标准.NET 库

     IronPython 的能力在于它可以无缝访问.NET 类库。这个练习将会示范如何使用(标准).NET 类库。

Task 1: 基本.NET 类库使用

  1. 在tutorial路径下启动IronPython 控制台 (see Introduction for details).

  2. 使用 "import" 声明, 引入 .NET 系统名空间:

import System

  1. 显示System.Environment 类并访问其下面的属性::

dir(System.Environment)

System.Environment.OSVersion

System.Environment.CommandLine

 

       如下是其命令行的输入:

 

>>> dir(System.Environment)

 

>>> System.Environment.OSVersion

<System.OperatingSystem object at 0x000000000000002B [Microsoft Windows NT 6.0.6000.0]

>>> System.Environment.CommandLine

'C:""IronPython""ipy.exe'

 

  1. 使用“from ... import ..." 引入相应类库声明,并使用dir()显示全局名空间内容。

from System.Math import *

dir()

 

      现在您可以调用Math 方法,而不必指定名空间和类前缀:  


Sin(PI/2)

 

      显示输出为:

 

>>> from System.Math import *

>>> dir()

['Abs', 'Acos', 'Asin', 'Atan', 'Atan2', 'BigMul', 'Ceiling', 'Cos', 'Cosh', 'DivRem', 'E', 'Equals', 'Exp', 'Floor', 'GetHashCode', 'GetType', 'IEEERemainder', 'Log', 'Log10', 'Max', 'Min', 'PI', 'Pow', 'Round', 'Sign', 'Sin', 'Sinh', 'Sqrt', 'System', 'Tan', 'Tanh', 'ToString', 'Truncate', '__builtins__', '__doc__', '__name__']

>>> Sin(PI/2)

1.0

Task 2: 使用.NET 类

  1. 声明“System.Collections”名空间到“全局名空间”内:

from System.Collections import *

  1. 创建 Hashtable 类实例并使用dir()显示实例的内容:

h = Hashtable()

dir(h)

  1. 在hash表中插入一些元素:

h["a"] = "IronPython"

h["b"] = "Tutorial"

 

        IronPython 支持C# 风格语法来访问hash表元素. 相同的语法可用于支持索引的对象(Arrays, Array lists etc):

 

h["a"]

 

        上面的操作步骤将会显示如下输出:

 

>>> h["a"] = "IronPython"
>>> h["b"] = "Tutorial"

>>> h["a"]

'IronPython'

  1. 使用声明"for ... in ..." 列举hash表的内容. hash 表元素作为"DictionaryEntry" 类实例.
    打印"Key"和"Value"属性:

for e in h: print e.Key, ":", e.Value

 

        控制台显示如下输入:

>>> for e in h: print e.Key, ":", e.Value
...

a : IronPython
b : Tutorial

  1. 你可以向python内置列表传递参数来初始化集合类. 您可以通过[1,2,3]来创建指定元素来创
    建Python 列表[1,2,3].  
    You create tuples by specifying elements in the parentheses: (1,2,3).

l = ArrayList([1,2,3])

for i in l: print i

s = Stack((1,2,3))

while s.Count: s.Pop()

 

        输出如下:

 

>>> l = ArrayList([1,2,3])
>>> for i in l: print i
...

1
2
3

>>> s = Stack((1,2,3))
>>> while s.Count: s.Pop()
...

3
2
1

Task 3: 泛型

  1. 从System.Collections.Generic名空间中,来声明泛型集合类:

from System.Collections.Generic import *

  1. 初始化泛型类实例, 其泛型类型参数必须被指定.  IronPython 使用如下语法来指定类型参数:

    generic_type[type_argument, ...] (泛型类型[类型参数]).  创建泛型string列表实例:

l = List[str]()

  1. 添加字符串数据到列表中( 因为创建了字符串列表,可以进行添加):

l.Add("Hello")

l.Add("Hi")

  1. 尝试添加其它类型的数据:

l.Add(3)

l.Add(2.5)

l.Add([1,2,3])

 

        显然,添加“非字符串”型数据会导致如下“类型错误”输出:

>>> l.Add(3)

Traceback (most recent call last):
File , line unknown, in Initialize##40
TypeError: expected str, got int

  1. 遍历泛型集合:

for i in l: print i

The output will be:

>>> for i in l: print i
...

Hello
Hi

TypeError: expected str, got int TypeError: expected str, got float TypeError: expected str, got list

  1. 按下Ctrl+Z 或 F6 回车,退出IronPython 控制台。

      好了,今天就先翻译到这里了,看了看原文,发现刚翻译了1/4, 看来要再用2-3个篇幅来完成全篇翻译。我
想等全部翻译结束后,将翻译的各篇文章拼揍起来。

      感兴趣的朋友可以通过EMAIL或在回复中与我联系。



      控制台程序下载链接:http://www.cnblogs.com/files/daizhj/ipy.zip

 

转载于:https://www.cnblogs.com/daizhj/archive/2008/07/21/1247345.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/476555.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用python控制钉钉软件_Python—实现钉钉后台开发

二、实现钉钉免登流程 免登流程分四步&#xff1a;1、前端获取钉钉免登授权码code&#xff1b;2、后端获取access_token&#xff1b;3、使用授权码code和access_token换取用户userid&#xff1b;4、通过access_token和userid换取用户详情userinfo。 前端获取授权码code。// 获取…

LeetCode 1123. 最深叶节点的最近公共祖先(递归比较子树高度)

1. 题目 给你一个有根节点的二叉树&#xff0c;找到它最深的叶节点的最近公共祖先。 回想一下&#xff1a; 叶节点 是二叉树中没有子节点的节点树的根节点的 深度 为 0&#xff0c;如果某一节点的深度为 d&#xff0c;那它的子节点的深度就是 d1如果我们假定 A 是一组节点 S…

万字综述:目标检测模型YOLOv1-v7深度解析

文&#xff5c;Rocky Ding源&#xff5c;WeThinkln大家好&#xff0c;我是Rocky。近年来YOLO系列层出不穷&#xff0c;更新不断&#xff0c;已经到v7版本。Rocky认为不能简单用版本高低来评判一个系列的效果好坏&#xff0c;YOLOv1-v7不同版本各有特色&#xff0c;在不同场景&a…

python手枪_Python入门,爬虫训练——枪械查询

一、效果图&#xff1a;二、怎么做到的&#xff1f; 1&#xff0c;首先安装requests、bs4. 这两个第三方模块。 我们按住winR 在弹出来的窗口上输入cmd&#xff0c;来到命令窗口&#xff0c;输入pip install requests、pip install bs4即可&#xff0c;网速慢的可以切换至国内源…

LeetCode 865. 具有所有最深结点的最小子树(递归)

1. 题目 给定一个根为 root 的二叉树&#xff0c;每个结点的深度是它到根的最短距离。 如果一个结点在整个树的任意结点之间具有最大的深度&#xff0c;则该结点是最深的。 一个结点的子树是该结点加上它的所有后代的集合。 返回能满足“以该结点为根的子树中包含所有最深的…

为什么python是解释型面向对象的语言_python为什么是面向对象的

Python虽然是解释型语言&#xff0c;但从设计之初就已经是一门面向对象的语言&#xff0c;对于Python来说一切皆为对象。正因为如此&#xff0c;在Python中创建一个类和对象是很容易的&#xff0c;当然如果习惯面向过程或者函数的写法也是可以的&#xff0c;Python并不做硬性的…

AI写剧本炸场戏剧节!DeepMind出品,马斯克看了直夸,网友看到接口悟了

文&#xff5c;羿阁 萧箫 发自 凹非寺源&#xff5c;量子位OpenAI的ChatGPT大火后&#xff0c;DeepMind终于也坐不住了&#xff01;这次&#xff0c;他们推出一款名为“Dramatron”的新AI&#xff0c;用上它人人都可以变身编剧或作家。只需给出一句话大纲&#xff0c;Dramatron…

程序员面试金典 - 面试题 08.14. 布尔运算(区间动态规划)

1. 题目 给定一个布尔表达式和一个期望的布尔结果 result&#xff0c;布尔表达式由 0 (false)、1 (true)、& (AND)、 | (OR) 和 ^ (XOR) 符号组成。 实现一个函数&#xff0c;算出有几种可使该表达式得出 result 值的括号方法。 示例 1: 输入: s "1^0|0|1", r…

推荐优质的深度学习公众号

人工智能行业目前已接近饱和状态&#xff0c;如何从内卷中脱颖而出&#xff0c;除了极强的自律之外&#xff0c;系统性的学习方法也很重要。今天给大家推荐10个原创公众号&#xff0c;这些公众号定期会发些高质量原创&#xff0c;希望可以让你更高效的学习。小白学视觉哈工大博…

SQLServer安装挂起解决方法

出现“以前的某个程序安装已在安装计算机上创建挂起的文件操作。运行安装程序之前必须重新启动计算机”错误。无法进行下去。 具体步骤是&#xff1a; 1&#xff09;添加/删除程序中彻底删除sql server。 2&#xff09;将没有删除的sql server目录也删除掉。 …

程序员面试金典 - 面试题 17.06. 2出现的次数(找递推规律)

1. 题目 编写一个方法&#xff0c;计算从 0 到 n (含 n) 中数字 2 出现的次数。 示例: 输入: 25 输出: 9 解释: (2, 12, 20, 21, 22, 23, 24, 25)(注意 22 应该算作两次)提示&#xff1a; n < 10^9来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;…

python8个程序语言_所有程序员必知--2019年最流行的8种编程语言和框架

上图是您应该在2019年根据各种&#xff0c;统计和事实寻找的8种最佳编程语言和框架的列表。在技​​术不断进步的当代世界中&#xff0c;计算机无处不在。为计算机编写程序是当前IT市场上最关键的工作配置文件之一。 您是否想过还有比这更忙的任务&#xff1f;它正在选择合适的…

ChatGPT进入百度“弱智吧”后,疯了

文 | 兔子酱无论你玩不玩贴吧&#xff0c;“弱智吧”的大名很多人应该听说过。如今弱智吧的关注人数已经超过了200万。。。不得不说&#xff0c;能将这么多“弱智”聚在一起&#xff0c;“弱智吧”撑起了后百度贴吧时代的辉煌。。。来一起感受下“弱智吧”的日常&#xff1a;能…

打印网页时背景图片的问题

当我们打印一个网页时&#xff0c;默认情况下&#xff0c;网页的背景图片是不会被打印出来的 这与我们的打印代码无关&#xff0c;需要设置IE便可&#xff0c;如下图&#xff1a; 转载于:https://www.cnblogs.com/blodfox777/archive/2008/08/05/1260860.html

程序员面试金典 - 面试题 08.02. 迷路的机器人(DFS/动态规划)

文章目录1. 题目2. 解题2.1 DFS2.2 动态规划1. 题目 设想有个机器人坐在一个网格的左上角&#xff0c;网格 r 行 c 列。 机器人只能向下或向右移动&#xff0c;但不能走到一些被禁止的网格&#xff08;有障碍物&#xff09;。 设计一种算法&#xff0c;寻找机器人从左上角移动…

python数据分析开发环境_在MAC上搭建python数据分析开发环境

最近工作转型到数据开发领域&#xff0c;想在本地搭建一个数据开发环境。自己有三年python开发经验&#xff0c;马上想到使用numpy、scipy、sklearn、pandas搭建一套数据开发环境。 ubuntu的环境&#xff0c;百度中文章比较多&#xff0c;搭建起来非常顺利。MAC环境的资料比较少…

方向盘开极品飞车9很Hapyy

一直以来&#xff0c;总是找不到一款自己心爱的游戏&#xff0c;呵呵&#xff0c;弄到个方向盘&#xff0c;开极品很HI喔。。。 虽然现在没空去玩&#xff0c;只能把方向盘放在电脑的左边&#xff0c;没事的时候只能看看了&#xff0c;不过有个期盼可以玩一把的游戏也很不错呀&…

负样本为王,百篇论文概览负采样方法的前世今生

文&#xff5c;徐澜玲源&#xff5c;RUC AI Box目录1. 研究背景1.1 什么是负采样&#xff1f;1.2 为什么需要负采样&#xff1f;1.3 为什么需要高质量的负采样&#xff1f;2. 负采样方法分类梳理2.1 静态负采样2.2 强负例采样2.3 对抗式负采样2.4 基于图的负采样2.5 引入额外信…

程序员面试金典 - 面试题 17.25. 单词矩阵(Trie树+DFS回溯,hard)

1. 题目 给定一份单词的清单&#xff0c;设计一个算法&#xff0c;创建由字母组成的面积最大的矩形&#xff0c;其中每一行组成一个单词(自左向右)&#xff0c;每一列也组成一个单词(自上而下)。 不要求这些单词在清单里连续出现&#xff0c;但要求所有行等长&#xff0c;所有…

python mysql操作封装库_python封装mysq操作,进行数据库的增删改

python操作mysql进行封装&#xff0c;封装的好处我就不提了&#xff0c;以下是我做项目时的一个封装&#xff0c;大家可以根据实际需要进行自己的一个封装我封装的内容&#xff1a;1.数据库的配置文件2.获取数据配置文件的地址3.连接数据库的操作4.操作mysql的语句5.调用mysql的…