即使 Java 语言不支持全局函数,您也可以轻松创建Jython全局函数。您还可以定义Jython全局变量(通常要设置常量,而不必为它们创建类包装器)。例如,看一下下面的清单:
清单 10. Jython全局函数以字符串形式返回一系列数字(保存在名为 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 ,它们用作该程序的常量,其中一个是整数,而另一个是字符串。
接着我们使用 def 关键字定义了函数 CounterString 。该函数有一个称为 length 的整数参数。Jython 未显式检查该参数是否是整数,这一事实是 Jython 的动态特性的一个优点;但它同时也可能是一个缺点,因为某些类型错误只有在后面的 Java 编程中才能被捕获。
请注意函数特征符行以冒号结尾,从而引入了一个新块,它是通过使后续行缩进来标记的。这一新块的第一行将字符串 buffer 初始化为空字符串。对这个 buffer 进行操作以产生所期望的函数结果。
下一行创建了一个循环。Jython 的 for 语句与 Java 语言语句完全不同。在 Java 编程中,您可以设置初始和终止条件,以及每个循环步骤。Jython 的循环自始至终总使用一个特殊序列。该序列一般是一个列表,它是 Jython 的一种非常重要的数据类型。
由三个字符串组成的列表如下所示:
["a", b", "c"]
如果您想对从 1到 N 的数字作循环(如同我们这里所做的),那么可以使用函数 range() ,它返回给定范围内的数字列表。在交互式 Jython 提示符下做些实验应该会帮助您熟悉这个工具:
清单 11. range() 函数示例
- >>> 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 循环的每个迭代都作为一个代码块运行,该代码块从该函数体其余部分缩进一层。该块是将当前 buffer 并置到新数字的一行代码,首先使用 str() 函数(而不是 Java 编程中的 cast )将新数字强制转换成字符串,随后追加一个分隔符。该循环终止后,返回最终的 buffer。该函数体之后的一行代码对它进行测试。Jython 同样允许您不使用任何特殊工具(如应用程序类上的 main 方法)就可以完成这个任务。清单 10 的输出显示如下:
清单 12. 清单 10 的输出
- $ jython listing10.py
- 1 2 3 4 5 6 7 8 9
以上便是Jython全局函数的介绍。
【编辑推荐】