在整个应用程序里,只有三行语句,是一个最简短的WIN32的应用程序,但它的功能也是很有限,只是显示一个提示框,把一个字符串显示出来,其它什么事情也没有做。下面就来分析这三行语句了,别小看这三行语句,其实是隐藏着很多知识点在其背后。比如使用了三个关键字:from、import和None。其中from关键字和import关键字做成一个语句表达形式,它们的简单意思就是表示从某个模块(库)里导入模块顶层的一些对象。表现的形式如下:
from 模块(库) import 对象
在这里相关语句为:
from ctypes import *
那么这行语句的意思就是从ctypes模块(库)里导入所有顶层的对象。星号(*)是表示所有对象,当然,也是可以指定特定名称的对象导入。比如下面的语句:
from ctypes import windll
这行语句表示就只导入windll对象。这种方式与星号(*)的区别是限制了从模块里导入的对象类型。如果一个模块里的代码比较多,就倾向使用指定对象名称导入,这样可以避免命名冲突。如果想使用比较简单,使用星号方式是比较方便好用。另外使用from形式导入时,跟直接使用import是有区别的。from形式表示从模块里拷贝顶层作用域里所有的对象到目前from语句所在作用域来。如果原来导入的模块发生了改变,from 形式拷贝的对象名称是不会改变的。这时就需要比较小心那些不断地改变的对象,最好不要使用from的形式了,而使用import的形式。在Python里可以导入很多类型的模块,比如Python写的模块文件,或者C写的符合Python调用接口的模块文件,又或者C++写的符合Python调用接口的模块文件。
ctypes库
在这语句里是导入了ctypes库(模块),那么ctypes库是干什么用呢?简而言之,ctypes库就是用来帮助Python从源码里调用C语言写的动态连接库(DLL)。从一门语言调用另外一门语言是一个复杂的过程,那么为什么要调用呢?可能原因是以下几点:
1)系统模块是事实上的标准,无法自行开发。比如在Windows操作系统是使用C和C++开发的,因此要使用Win32的API接口,必须使用C语言的方式来调用系统的功能。另外操作系统的开发厂家也不可能提供所有其它语言的接口。
2)功能模块需要更高的效率。由于Python是动态语言、解释型语言,执行速度介于编译型语言(比如C、C++)和完全动态解释语言的速度之间(比如Basic)。比如有一段算法计算非常大,要求性能非常高,就可以使用C或C++语言来开发一个动态连接库,然后让Python来调用,就可以提高Python程序的整体执行性能。
3)以前使用C或C++开发的旧模块,需要使用Python来调用,以便兼容和保护以前的资源。
from语句