開始IronPython之旅:交互式解釋器與常用函數(shù)
譯文【51CTO精選譯文】鑒于Python的強(qiáng)大以及.NET平臺的良好發(fā)展勢頭,IronPython成為Python開發(fā)的一個十分值得關(guān)注的事物。上一篇文章中我們對IronPython進(jìn)行了一番簡單的介紹,接下來,我們將初步學(xué)習(xí)如何使用IronPython。一開始先簡單介紹一下IronPython開發(fā)環(huán)境的搭建,然后會粗略的涉及一些基本語法——與Python一樣的語法。
四、交互式解釋器
學(xué)習(xí)IronPython最簡單的方法就是使用它,我們建議您下載安裝IronPython 2.6。下載的安裝程序包含了二進(jìn)制文件、Python標(biāo)準(zhǔn)程序庫、用于Silverlight的IronPython和一個教程。此外,還有一個成為Pyc.py的工具,該工具可以把IronPython應(yīng)用程序編譯成二進(jìn)制文件。
Ipy.exe可以用來執(zhí)行IronPython程序,對于熟悉Python語言及探索.NET程序集來說非常有用。在本文中,交互會話使用>>> 來表示。
- >>> 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,等等。通過使用Python的導(dǎo)入手段,我們就能夠訪問.NET程序庫和類。
在使用.NET framework時,通常要導(dǎo)入clr模塊,該模塊含有用來為程序集添加索引之類的函數(shù)。一旦為程序集添加了引用,我們就能夠從該程序集的命名空間中導(dǎo)入類。下面以Windows Forms為例進(jìn)行說明:
- >>> 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!
下面我們對上述代碼中有關(guān)的Python語法做相應(yīng)的介紹。
1. 這里通過Form和Button構(gòu)造函數(shù)的關(guān)鍵字參數(shù)來設(shè)置有關(guān)屬性。
2. 事件處理函數(shù)(onClick)是一個標(biāo)準(zhǔn)的Python函數(shù),IronPython會在幕后調(diào)用按鈕單擊處理程序(EventHandler)。
注意,在Python中,語句結(jié)構(gòu)是用縮排表示的,而不是花括號。onClick函數(shù)體相對于其聲明來說,要做縮進(jìn)處理。
六、Dir函數(shù)與help函數(shù)
在通過交互式解釋器進(jìn)行學(xué)習(xí)的時候,有兩個函數(shù)非常有用,它們分別是dir與help函數(shù)。Dir(some_object)常用來返回一個對象的所有成員,它們會作為字符串列表返回,而在Python中,我們可以根據(jù)需要對列表進(jìn)行過濾或分割處理。例如,這里我們將顯示系統(tǒng)命名空間中所有以字母“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)槲覀兲峁┮粋€對象更為詳細(xì)的信息。提供help函數(shù),我們可以打印出對象的所有方法,并針對個別方法再次調(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)程序庫的一部分,namedtuple是一個類制造廠,我們可以使用它新建其行為類似枚舉類型(Python沒有內(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)行時新建類是動態(tài)語言的優(yōu)點(diǎn)之一。
七、設(shè)置sys.path
使用交互式解釋器時,一個重要因素是當(dāng)我們執(zhí)行導(dǎo)入語句或者為程序集添加引用時,Python需要到哪里去查找。默認(rèn)時,所有標(biāo)準(zhǔn).NET框架都可以被引用。另外IronPython安裝程序也包含有Python標(biāo)準(zhǔn)程序庫。對于別的東西,我們需要告訴IronPython到哪里查找python模塊和程序集。
Python用于查找python模塊時,需要用到稱為sys.path的系統(tǒng)模塊中的一個Python列表。對于IronPython來說,當(dāng)我們?yōu)槌绦蚣砑右玫臅r候,IronPython也是通過sys.path來指出到哪里去尋找程序集的。為了將一個新目錄添加到搜索路徑,只需將該路徑作為字符串附加上去就行,具體如下所示:
- >>> import sys
- >>> path = 'c:\\Projects\\MyProject'
- >>> sys.path.append(path)
- >>> import clr
- >>> clr.AddReference('MyAssembly')
由于字符串中的反斜杠被用作轉(zhuǎn)義字符使用,因此我們必須在路徑中使用雙反斜杠。
到這里,對于IronPython所需要了解的基礎(chǔ)知識也介紹的差不多了。如果你對于在.NET平臺上運(yùn)行Python感興趣,那么就來試試看IronPython吧!
【編輯推薦】