本节书摘来自异步社区《面向ArcGIS的Python脚本编程》一书中的第1章,第1.8节,作者:【美】Paul A. Zandbergen著,更多章节内容可以访问云栖社区“异步社区”公众号查看
1.8 Python脚本编辑器
一个脚本文件从本质上来说是一列可以由程序或脚本引擎运行的指令。脚本通常只是简单的文本文件,它有一个特定的文件扩展名并且使用特定的脚本语法编写指令。一个通用的文本编辑器可以打开和编辑大多数的脚本文件。然而,使用一个专门的脚本编辑器既可以实现更多的编辑功能,也可以直接运行脚本。
使用Python的方式很多,最基本的方式就是使用所谓的命令行。如果使用过其他编程语言,那么可能熟悉这种方式。在Windows操作系统中,单击Start按钮,然后再单击All Programs> ArcGIS>Python 2.7>Python(Command line),就可以访问Python的命令行界面,如图1.8所示。
虽然这个界面可以实现Python的所有功能,但是它在编写和调试脚本方面的功能有限。所以,与Python命令行相比,Python编辑器会显得更为高效。菜单形式的界面和工具,使得Python脚本编辑器在组织和调试脚本等方面更为方便。
Python编辑器也被称为集成开发环境(IDE)。目前,市场上有许多不同的开发环境,其中既有开源软件,也有商业软件。一些IDE是针对特定平台(如Windows、Mac和Linux)设计的,也有一些是针对特定编程语言(如C++和.NET语言)设计的。可以在Python wiki的页面中了解更多有关Python编辑器的内容。使用何种编辑器很大程度上取决于个人习惯,资深的Python程序员都有自己最喜欢的编辑器。Python在不同编辑器中的语法是相同的,这是Python的一个优势。
Python默认的集成开发环境是IDLE。在Windows操作系统中,单击Start按钮,然后再单击All Programs>ArGIS>Python 2.7>IDLE(Python GUI),就可以访问Python IDLE。GUI表示图形用户界面。IDLE也被称为Python Shell,如图1.9所示。
可以从Help菜单栏获取所有菜单项的介绍。在Python Shell的菜单栏中,可以单击Help>IDLE Help查看这些描述。
注意Python Shell的最后一行是以“>>>”开始,它是交互式解释器的命令提示符。在这里可以输入代码并按ENTER,然后交互式解释器会执行命令。准备好开始编写第一行Python代码了吗?
>>>print "Hello World"
按下ENTER后,就会输出如下所示的内容:
Hello World
>>>
为什么会输出上述内容呢?按下ENTER后,交互式解释器将读入输入的命令,在下一行打出字符串"Hello World",然后再在下一行给出新的提示符,等待下一次的输入。这里的print语句是指在屏幕上输出文本。
现在应该知道为什么Python被称为一种解释性的编程语言了吧。当用户完成命令行的输入,然后按下ENTER时,命令行就会被解释,然后立即执行。
当用户输入一些Python解释器不能解释的语句时会出现什么情况呢?例如:
>>> I like eggs for breakfast
会立刻得到语法无效的提示:
StntaxError: invalid syntax
>>>
在交互式Python解释器中还有一些其他的功能:输入的代码会根据代码的性质显示成不同的颜色。例如,字符print会显示成橙色;字符串"Hello World"会显示成绿色。这种方法可以反映交互式解释器如何理解这些代码。在上面的例子中,橙色代表Python语句,绿色代表字符串。这种语法高亮显示的方法,对于检查语法错误十分有效。但是要注意,不同的Python编辑器会有不同的语法高亮显示规则,因此不要太过习惯于某一种颜色方案。
使用交互式解释器将会有助于学习Python语法的基础知识。用户可以立即知道结果,在输入代码的时候不需要再担心要保存代码。但是,如果要编写稍微复杂的代码,最好将它保存在一个脚本文件中。所以,需要牢记在交互式Python解释器中编写的代码并不意味着它已经被保存。
现在,您需要了解在交互式编译器中编写代码和编写脚本的不同之处。在Python Shell的菜单栏中,单击File>New windows,就打开了一个名为Untitled的新窗口,如图1.10所示。这是一个脚本窗口,而且没有任何提示。
现在输入之前的一行代码:
print "Hello World"
按下ENTER后,任何事情都没发生——这是因为脚本本身并不具有交互性。一个脚本文件需要作为一个程序才可以被运行。脚本必须在保存后才能执行。在菜单栏单击File>Save As,然后将脚本命名为hello.py。.py是脚本文件的后缀名。现在就可以运行脚本了。在菜单栏里,单击Run>Run Module,字符串"Hello World"就会输出到交互式解释器中。
在编码过程中,最好同时打开交互式解释器和脚本窗口。在交互式解释器里可以立即运行某些代码或者检查某一行语法;而在脚本窗口中,可以保存已经写好的代码,并继续编写代码。有时候,也可以通过交互式解释器输出的结果来测试脚本是否正确。
在Windows平台上被广泛使用的一个Python编辑器是PythonWin。在本书的后续部分,将使用PythonWin作为默认的脚本编辑器。不管什么编辑器,它们使用的语法是相同的,主要的区别在于编写、组织、测试代码的方式。
注释:
虽然Python在安装ArcGIS时被默认安装,但是PythonWin却没有。在随书的练习01中,会有PythonWin的安装说明。
PythonWin界面如图1.11所示。在默认情况下,它打开的是一个被称为交互式窗口的交互式解释器,类似于Python IDLE。
在PythonWin菜单栏里,单击File > New > Python Script,就可以新建一个脚本。调节脚本窗口的大小,以便可以同时看见交互式窗口和脚本窗口。在脚本窗口菜单栏中,单击File > Save As,就可以保存脚本。在下面的例子中,脚本被保存为hellowin.py。在脚本窗口中,输入如下代码:
print "hello world"
在脚本窗口菜单栏中,单击File > Run运行脚本,结果会显示在交互式窗口上如图1.12所示。PythonWin中的语法高亮规则与Python Shell的略有不同。
注释:
从现在开始,本书将使用PythonWin作为Python的编辑器。选择哪种Python编辑器很大程度上取决于程序员自己。本书选用PythonWin是因为它不仅操作简单,而且在Windows平台上表现十分稳定。经验丰富的程序员可以自由地选择编辑器,只要它能兼容Python。
除了像IDLE和PythonWin这些专门的Python编辑器之外,通用的代码编辑器也可以用于编写Python脚本。这些编辑器通常会提供语法高亮、格式设置等代码编辑选项。其中有一些编辑器被广泛使用,例如Bluefish、Context和Notepad++。通常情况下,这些代码编辑器可以处理多种编程语言,所以,经验丰富的程序员可以在一种编辑器上使用多种程序语言。相反,PythonWin是专门用于编写Python代码的编辑器。专门的Python编辑器与文本编辑器相比,具有一定的优势,它具有代码提示功能,并可以进行调试,这就是本书使用PythonWin,而不使用通用代码编辑器的原因之一。
注释:
谨慎使用普通的文本编辑器(例如Notepad)编写代码,因为它并不是专门用于编写代码的。这些文本编辑器不能保存脚本的编码风格,也没有语法高亮功能或任何有助于规范脚本格式的工具。所以在选择文本编辑器的时候,要确保它是专门用于编写程序代码的。
从ArcGIS 10开始,就可以直接在ArcGIS for Desktop中使用Python,它既方便又高效。ArcGIS 10中新的Python窗口取代了ArcGIS 9中的Command Line窗口。在新的Python窗口中,左半部分是一个Python交互式解释器,右半部分是帮助界面,如图1.13所示。
和其他交互式解释器一样,Python窗口也会立即执行输入完毕的代码,如图1.14所示。
Python窗口可以用于快速测试简单的代码。Python窗口的一个优点就是它会提供语法提示,即可以自动补全代码。例如,输入字母p时,Python窗口会提示出pass和print供选择,如图1.15所示。这将加快编码的速度,减少出错的次数。
后面的章节会更详细地介绍如何高效使用Python窗口。
回顾一下,任何Python脚本都是由不同的模块构成,这些模块是Python代码最高级的组织形式。Python脚本文件实际上是简单的文本文件,因此任何文本编辑器都可以编写脚本代码。Python文件的后缀是.py,这样就可以自动和一个Python编辑器进行关联。
注释:
Python脚本文件的名称必须以字母开头,后面可以跟随任何字母、数字或者下划线。同时,脚本文件的名称中不能出现Python的关键字,这些关键字在后面的章节中会提到。
关于示例代码的规定:如果代码前出现>>>提示符,那么该代码是在交互式解释器(例如ArcGIS for Desktop中的Python窗口或PythonWin里的交互式窗口)里编写的。按下ENTER键后,代码会被立即执行。如果示例代码前没有提示符,那么该代码是在脚本窗口中编写的,需要运行这个脚本才能执行代码。本书中大多数的示例代码既可以在交互式解释器中运行,也可以直接通过脚本文件运行。
注释:
本书使用PythonWin和ArcGIS中的Python窗口来编写和运行Python代码,也可以通过其他的编辑器使用这些代码。