輕松創(chuàng)建Jython全局函數(shù)
即使 Java 語(yǔ)言不支持全局函數(shù),您也可以輕松創(chuàng)建Jython全局函數(shù)。您還可以定義Jython全局變量(通常要設(shè)置常量,而不必為它們創(chuàng)建類(lèi)包裝器)。例如,看一下下面的清單:
清單 10. Jython全局函數(shù)以字符串形式返回一系列數(shù)字(保存在名為 listing10.py 的文件中)
- START = 1
- SPACER = " "
- def CounterString(length):
- buffer = ""
- for i in range(START, length):
- buffer = buffer + str(i) + SPACER
- return buffer
- print CounterString(10)
首先我們定義了兩個(gè)Jython全局變量 START 和 SPACER ,它們用作該程序的常量,其中一個(gè)是整數(shù),而另一個(gè)是字符串。
接著我們使用 def 關(guān)鍵字定義了函數(shù) CounterString 。該函數(shù)有一個(gè)稱(chēng)為 length 的整數(shù)參數(shù)。Jython 未顯式檢查該參數(shù)是否是整數(shù),這一事實(shí)是 Jython 的動(dòng)態(tài)特性的一個(gè)優(yōu)點(diǎn);但它同時(shí)也可能是一個(gè)缺點(diǎn),因?yàn)槟承╊?lèi)型錯(cuò)誤只有在后面的 Java 編程中才能被捕獲。
請(qǐng)注意函數(shù)特征符行以冒號(hào)結(jié)尾,從而引入了一個(gè)新塊,它是通過(guò)使后續(xù)行縮進(jìn)來(lái)標(biāo)記的。這一新塊的第一行將字符串 buffer 初始化為空字符串。對(duì)這個(gè) buffer 進(jìn)行操作以產(chǎn)生所期望的函數(shù)結(jié)果。
下一行創(chuàng)建了一個(gè)循環(huán)。Jython 的 for 語(yǔ)句與 Java 語(yǔ)言語(yǔ)句完全不同。在 Java 編程中,您可以設(shè)置初始和終止條件,以及每個(gè)循環(huán)步驟。Jython 的循環(huán)自始至終總使用一個(gè)特殊序列。該序列一般是一個(gè)列表,它是 Jython 的一種非常重要的數(shù)據(jù)類(lèi)型。
由三個(gè)字符串組成的列表如下所示:
["a", b", "c"]
如果您想對(duì)從 1到 N 的數(shù)字作循環(huán)(如同我們這里所做的),那么可以使用函數(shù) range() ,它返回給定范圍內(nèi)的數(shù)字列表。在交互式 Jython 提示符下做些實(shí)驗(yàn)應(yīng)該會(huì)幫助您熟悉這個(gè)工具:
清單 11. range() 函數(shù)示例
- >>> range(5)
- [0, 1, 2, 3, 4]
- >>> range(1, 5)
- [1, 2, 3, 4]
- >>> range(1, 10, 2)
- [1, 3, 5, 7, 9]
- >>> range(10, 1, -3)
- [10, 7, 4]
回過(guò)頭看一下 清單 10, for 循環(huán)的每個(gè)迭代都作為一個(gè)代碼塊運(yùn)行,該代碼塊從該函數(shù)體其余部分縮進(jìn)一層。該塊是將當(dāng)前 buffer 并置到新數(shù)字的一行代碼,首先使用 str() 函數(shù)(而不是 Java 編程中的 cast )將新數(shù)字強(qiáng)制轉(zhuǎn)換成字符串,隨后追加一個(gè)分隔符。該循環(huán)終止后,返回最終的 buffer。該函數(shù)體之后的一行代碼對(duì)它進(jìn)行測(cè)試。Jython 同樣允許您不使用任何特殊工具(如應(yīng)用程序類(lèi)上的 main 方法)就可以完成這個(gè)任務(wù)。清單 10 的輸出顯示如下:
清單 12. 清單 10 的輸出
- $ jython listing10.py
- 1 2 3 4 5 6 7 8 9
以上便是Jython全局函數(shù)的介紹。
【編輯推薦】