2.4. 万物皆对象

也许您没在意,我刚才的意思是 Python 函数有属性,并且这些属性在运行时是可用的。

Python 中,函数同其它东西一样也是对象。

打开您习惯使用的 Python IDE 执行如下的操作:

例 2.3. 访问 buildConnectionString 函数的 doc string

>>> import odbchelper                              
>>> params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}
>>> print odbchelper.buildConnectionString(params) 
server=mpilgrim;uid=sa;database=master;pwd=secret
>>> print odbchelper.buildConnectionString.__doc__ 
Build a connection string from a dictionary

Returns string.
第一行将 odbchelper 程序作为模块导入。模块是指一个可以交互使用,或者从另一 Python 程序访问的代码段。(您在 第 4 章 将会看到多模块 Python 程序的许多例子。) 只要导入了一个模块,就可以引用它的任何公共的函数、类或属性。模块可以通过这种方法来使用其它模块的功能,您也可以在 IDE 中这样做。这是一个很重要的概念,在后面我们将谈得更多。
当使用在被导入模块中定义的函数时,必须包含模块的名字。所以不能只使用 buildConnectionString,而应该使用 odbchelper.buildConnectionString。如果您用过 Java 的类,对此应该不感到陌生。
访问函数的 __doc__ 属性不像您想象的那样是通过函数调用。
Python 中的 import 就像 Perl 中的 requireimport 一个 Python 模块后,时时彩计划软件公式:您就可以使用 module.function 来访问它的函数;require 一个 Perl 模块后,您就可以使用 module::function 来访问它的函数。

2.4.1. 模块导入的搜索路径

在我们继续之前,我想简要地提一下库的搜索路径。当导入一个模块时,Python 在几个地方进行搜索。明确地,它会对定义在 sys.path 中的目录逐个进行搜索。它只是一个list (列表),您可以容易地查看它或通过标准的list方法来修改它。(在本章的后面我们将学习更多关于list的知识。)

例 2.4. 模块导入的搜索路径

>>> import sys                 
>>> sys.path                   
['', '/usr/local/lib/python2.2', '/usr/local/lib/python2.2/plat-linux2',
'/usr/local/lib/python2.2/lib-dynload', '/usr/local/lib/python2.2/site-packages',
'/usr/local/lib/python2.2/site-packages/PIL', '/usr/local/lib/python2.2/site-packages/piddle']
>>> sys                        
<module 'sys' (built-in)>
>>> sys.path.append('/my/new/path') 
导入 sys 模块,使得它的所有函数和属性都有效。
sys.path 是一个指定当前搜索路径的目录列表。(您的输出结果可能有所不同,这取决于您的操作系统、正在运行的 Python 版本和初始安装的位置。)Python 将搜索这些目录 (按顺序) 来查找一个与您正试着导入的模块名相匹配的 .py 文件。
实际上,我没说实话。真实情况要比这更复杂,因为不是所有的模块都保存为 .py 文件。有一些模块 (像 sys),是“内置模块”,它们实际上是置于 Python 内部的。内置模块的行为如同一般的模块,但是它们的 Python 源代码是不可用的,因为它们不是用 Python 写的!(sys 模块是用 C 写的。)
在运行时,通过向 sys.path 追加目录名,就可以在 Python 的搜索路径中增加新的目录,然后当您导入模块时,Python 也会在那个目录中进行搜索。这个作用在 Python 运行时一直生效。(在 第 3 章 我们将讨论更多的关于 append 和其它的 list 方法。)

2.4.2. 何谓对象?

Python 中一切都是对象,并且几乎一切都有属性和方法。所有的函数都有一个内置的 __doc__ 属性,它会返回在函数源代码中定义的 doc stringsys 模块是一个对象,它有一个叫作 path 的属性;等等。

我们仍然在回避问题的实质,究竟何谓对象?不同的编程语言以不同的方式定义 “对象” 。 某些语言中,它意味着所有 对象必须 有属性和方法;另一些语言中,它意味着所有的对象都可以子类化。在 Python 中,定义是松散的;某些对象既没有属性也没有方法 (关于这一点的说明在 第 3 章),而且不是所有的对象都可以子类化 (关于这一点的说明在第 5 章)。但是万物皆对象从感性上可以解释为:一切都可以赋值给变量或作为参数传递给函数 (关于这一点的说明在第 4 章)。

这一点太重要了,所以我会在刚开始就不止一次地反复强调它,以免您没注意到:在 Python万物皆对象。字符串是对象。列表是对象。函数是对象。甚至模块也是对象,这一点我们很快会看到。

进一步阅读

江西时时彩是否公正 时时彩软件杀后三和值 时时彩转乐透工具 庄家时时彩软件 新时时彩玩角模式
重庆时时彩杀号三爷 时时彩组六玩法 中体时时彩网址 无敌时时彩软件下载 重庆时时彩飞马团队
江西时时彩日销量 重庆时时彩准确率 时时彩过年 爱情对赌电影 重庆时时彩代理师傅
时时彩技巧皇恩娱乐 如何看时时彩五星独胆 时时彩害我输惨了 时时彩官网银狐娱乐 江西时时彩接口
3d试机号后预测 山西福利彩票快乐十分 内蒙古时时彩开奖号码 北京11选5中奖规则 贵州11选5开奖走势
江西时时彩遗漏 永隆国际娱乐城 幸运28预测 北京pk十开奖历史记录 四川快乐12管理人电话
最新福建11选5软件 湖北快3开奖结果今天 大乐透走势图 中国福利快乐双彩 金都国际娱乐场
广东11选5基本走势图 安徽25选5 澳门五分彩平台官网 甘肃十一选五任五遗漏 pk10冠亚和值概率计算计划卐上海快3下载计划卐上海快3预测号计划卐快33不同中奖规则