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