Jython解释器对于快速检查和作提示都很方便,但您不必在这其中完成所有工作 ― Jython 还允许您在源文件中编写代码,并随后运行该代码(虽然使用 Jython 时,编译步骤是可选的)。以下清单是一个独立 Jython程序的示例:
清单 7. 模拟硬币投掷的样本 Jython程序(listing7.py)
- from java.util import Random
- rng = Random()
- #This is a comment in Jython
- print "Flipping a coin..."
- if rng.nextBoolean():
- print "Came up heads"
- else:
- print "Came up tails"
在解释如何运行该代码之前,让我们先解释一下代码。这个示例引入了 Jython 中的 if 语句,这是有些人对 Jython(及其先辈 Python)评论的首要方面之一。没有字符定界符标记出当 if 语句条件为真时要执行的代码块(Jython 中的条件不需要括起的圆括号,这与 Java 编程一样)。只是这些代码比周围的代码缩进一层。
Jython代码块总是使用缩进进行标记,而不是使用其它标记,例如花括号。引入代码块的语句(例如 if )以冒号作为结尾。Jython 的这个特性意味着在编写代码时必须小心,因为缩进代码的方式实际上可能会改变代码的含义。例如,清单 8a 产生的打印输出只有数字 3,因为它上面两个语句都属于其条件永远不为真的 if 块:
清单 8a. Jython代码的缩进:只打印“3”
- if 0:
- print "1"
- print "2"
- print "3"
如果我只更改其中一行的缩进,那么就会打印数字 2和数字 3:
清单 8b. Jython代码的缩进:打印“2”和“3”
- if 0:
- print "1"
- print "2"
- print "3"
缩进还必须一致,它必须与将代码组织成块的语句相关联,而且通常它还必须控制代码流。例如:
清单 8c. Jython代码的缩进:语法错误
- print "1"
- print "2"
- print "3"
这只会产生一个语法错误,因为没有任何控制语句要求将一个块与代码其余部分相分离。
使用缩进标记代码块是 Python 和 Jython 的更有争议的特性之一,但我认为这个问题常常被夸大了。毕竟,如果您遵循有关缩进的良好的编码标准,就不应该有这种问题。如果遵循了良好的编码缩进,那么机器会执行,同行评论家就无话可说,因此事实胜于雄辩。
此外,我知道当开发人员对这种语言使用一段时间后,没有谁会注意这种限制。适当缩进成为 Jython 的第二本性。缩进和语法之间的这种联系当然可能会引起以前未遇到过的错误,但是没有显式的定界符也消除了使用这些定界符的语言中的某些常见错误。
您可以不必编译就可运行 清单 7 中的文件(listing7.py),只需将该文件名作为 jython 命令的参数来调用,如下所示:
清单 9. 不编译就运行“硬币投掷”
- $ jython listing7.py
- Flipping a coin...
- Came up tails
- $
在上个示例中, $ 就是 UNIX shell 提示符,它非常象 Windows 系统上的 C:\> 。您还可以使用 jpythonc 命令将模块编译成 Java 字节码( .class )文件,该命令允许您使用 java 或 jre 命令直接运行它。用这种方法编译的 Jython 模块有一些限制,但这个问题超出了本文的范围。
【编辑推荐】