開(kāi)始IronPython之旅:交互式解釋器與常用函數(shù)
譯文【51CTO精選譯文】鑒于Python的強(qiáng)大以及.NET平臺(tái)的良好發(fā)展勢(shì)頭,IronPython成為Python開(kāi)發(fā)的一個(gè)十分值得關(guān)注的事物。上一篇文章中我們對(duì)IronPython進(jìn)行了一番簡(jiǎn)單的介紹,接下來(lái),我們將初步學(xué)習(xí)如何使用IronPython。一開(kāi)始先簡(jiǎn)單介紹一下IronPython開(kāi)發(fā)環(huán)境的搭建,然后會(huì)粗略的涉及一些基本語(yǔ)法——與Python一樣的語(yǔ)法。
四、交互式解釋器
學(xué)習(xí)IronPython最簡(jiǎn)單的方法就是使用它,我們建議您下載安裝IronPython 2.6。下載的安裝程序包含了二進(jìn)制文件、Python標(biāo)準(zhǔn)程序庫(kù)、用于Silverlight的IronPython和一個(gè)教程。此外,還有一個(gè)成為Pyc.py的工具,該工具可以把IronPython應(yīng)用程序編譯成二進(jìn)制文件。
Ipy.exe可以用來(lái)執(zhí)行IronPython程序,對(duì)于熟悉Python語(yǔ)言及探索.NET程序集來(lái)說(shuō)非常有用。在本文中,交互會(huì)話使用>>> 來(lái)表示。
- >>> from System import Array
- >>> help(Array.CreateInstance)
- Help on built-in function CreateInstance:
- CreateInstance(...)
- Array CreateInstance(Type elementType, Array[int] lengths)
五、與.NET的集成
IronPython本身是用C# 寫成的。IronPython使用原生的.NET類型,例如IronPython中的字符串類型即.NET字符串類型,整數(shù)類型即Int32,等等。通過(guò)使用Python的導(dǎo)入手段,我們就能夠訪問(wèn).NET程序庫(kù)和類。
在使用.NET framework時(shí),通常要導(dǎo)入clr模塊,該模塊含有用來(lái)為程序集添加索引之類的函數(shù)。一旦為程序集添加了引用,我們就能夠從該程序集的命名空間中導(dǎo)入類。下面以Windows Forms為例進(jìn)行說(shuō)明:
- >>> import clr
- >>> clr.AddReference('System.Windows.Forms')
- >>> from System.Windows.Forms import Application, Button, Form
- >>>
- >>> form = Form(Text="Hello World")
- >>> button = Button(Text="Click Me")
- >>> form.Controls.Add(button)
- >>>
- >>> def onClick(sender, event):
- ... print 'Ouch!'
- >>> button.Click += onClick
- >>> Application.Run(form)
- Ouch!
- Ouch!
下面我們對(duì)上述代碼中有關(guān)的Python語(yǔ)法做相應(yīng)的介紹。
1. 這里通過(guò)Form和Button構(gòu)造函數(shù)的關(guān)鍵字參數(shù)來(lái)設(shè)置有關(guān)屬性。
2. 事件處理函數(shù)(onClick)是一個(gè)標(biāo)準(zhǔn)的Python函數(shù),IronPython會(huì)在幕后調(diào)用按鈕單擊處理程序(EventHandler)。
注意,在Python中,語(yǔ)句結(jié)構(gòu)是用縮排表示的,而不是花括號(hào)。onClick函數(shù)體相對(duì)于其聲明來(lái)說(shuō),要做縮進(jìn)處理。
六、Dir函數(shù)與help函數(shù)
在通過(guò)交互式解釋器進(jìn)行學(xué)習(xí)的時(shí)候,有兩個(gè)函數(shù)非常有用,它們分別是dir與help函數(shù)。Dir(some_object)常用來(lái)返回一個(gè)對(duì)象的所有成員,它們會(huì)作為字符串列表返回,而在Python中,我們可以根據(jù)需要對(duì)列表進(jìn)行過(guò)濾或分割處理。例如,這里我們將顯示系統(tǒng)命名空間中所有以字母“I”開(kāi)頭的成員:
- >>> import System
- >>> for member in dir(System):
- ... if member.startswith('I'):
- ... print member
- ...
- IAppDomainSetup
- IAsyncResult
- ICloneable
- IComparable
- IConvertible
- ICustomFormatter
- IDisposable
- IEquatable
- IFormatProvider
- IFormattable
- (and so on...)
- >>>
Help(some_object)函數(shù)能夠?yàn)槲覀兲峁┮粋€(gè)對(duì)象更為詳細(xì)的信息。提供help函數(shù),我們可以打印出對(duì)象的所有方法,并針對(duì)個(gè)別方法再次調(diào)用該函數(shù)以獲取進(jìn)一步的信息:
- >>> from collections import namedtuple
- >>> help(namedtuple)
- Help on function namedtuple in module collections:
- namedtuple(typename, field_names, verbose=False)
- Returns a new subclass of tuple with named fields.
- >>> Point = namedtuple('Point', 'x y')
- >>> Point.__doc__ # docstring for the new class
- 'Point(x, y)'
- >>> p = Point(11, y=22) # instantiate with positional args or keywords
- >>> p[0] + p[1] # indexable like a plain tuple
- 33
- >>> x, y = p # unpack like a regular tuple
Collections模塊是Python標(biāo)準(zhǔn)程序庫(kù)的一部分,namedtuple是一個(gè)類制造廠,我們可以使用它新建其行為類似枚舉類型(Python沒(méi)有內(nèi)建的枚舉類型)的類:
- >>> from collections import namedtuple
- >>> Point = namedtuple('Point', 'x y')
- >>> point = Point(1, 3)
- >>> point
- Point(x=1, y=3)
- >>> point.x
- 1
- >>> point.y
- 3
在運(yùn)行時(shí)新建類是動(dòng)態(tài)語(yǔ)言的優(yōu)點(diǎn)之一。
七、設(shè)置sys.path
使用交互式解釋器時(shí),一個(gè)重要因素是當(dāng)我們執(zhí)行導(dǎo)入語(yǔ)句或者為程序集添加引用時(shí),Python需要到哪里去查找。默認(rèn)時(shí),所有標(biāo)準(zhǔn).NET框架都可以被引用。另外IronPython安裝程序也包含有Python標(biāo)準(zhǔn)程序庫(kù)。對(duì)于別的東西,我們需要告訴IronPython到哪里查找python模塊和程序集。
Python用于查找python模塊時(shí),需要用到稱為sys.path的系統(tǒng)模塊中的一個(gè)Python列表。對(duì)于IronPython來(lái)說(shuō),當(dāng)我們?yōu)槌绦蚣砑右玫臅r(shí)候,IronPython也是通過(guò)sys.path來(lái)指出到哪里去尋找程序集的。為了將一個(gè)新目錄添加到搜索路徑,只需將該路徑作為字符串附加上去就行,具體如下所示:
- >>> import sys
- >>> path = 'c:\\Projects\\MyProject'
- >>> sys.path.append(path)
- >>> import clr
- >>> clr.AddReference('MyAssembly')
由于字符串中的反斜杠被用作轉(zhuǎn)義字符使用,因此我們必須在路徑中使用雙反斜杠。
到這里,對(duì)于IronPython所需要了解的基礎(chǔ)知識(shí)也介紹的差不多了。如果你對(duì)于在.NET平臺(tái)上運(yùn)行Python感興趣,那么就來(lái)試試看IronPython吧!
【編輯推薦】