您当前位置:首页 > 深入 Python > 您的第一个 Python 程序 > 一切皆对象 | << >> | ||||
深入 Python从 Python 新手到专家 |
如果您错过了,我刚刚说过 Python 函数具有属性,并且这些属性在运行时可用。
函数,就像 Python 中的所有其他东西一样,是一个对象。
打开您最喜欢的 Python IDE 并按照说明操作
>>> 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 中的 require。一旦您 import 了一个 Python 模块,您就可以使用 module.function 访问其函数;一旦您 require 了一个 Perl 模块,您就可以使用 module::function 访问其函数。 |
在您继续之前,我想简要介绍一下库搜索路径。当您尝试导入模块时,Python 会在多个位置查找。具体来说,它会查找 sys.path 中定义的所有目录。这只是一个列表,您可以使用标准列表方法轻松查看或修改它。(您将在本章稍后学习有关列表的更多信息。)
>>> 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 和其他列表方法。) |
Python 中的一切都是对象,几乎所有东西都有属性和方法。所有函数都有一个内置属性 __doc__,它返回在函数源代码中定义的 docstring。sys 模块是一个对象,它具有(除其他外)一个名为 path 的属性。等等。
尽管如此,这仍然引出了一个问题。什么是对象?不同的编程语言以不同的方式定义“对象”。在某些语言中,这意味着所有对象必须具有属性和方法;而在其他语言中,这意味着所有对象都是可子类化的。在 Python 中,定义比较宽松;有些对象既没有属性也没有方法(第 3 章 中有更多介绍),并且并非所有对象都是可子类化的(第 5 章 中有更多介绍)。但从可以将其赋值给变量或作为参数传递给函数的意义上来说,一切都是对象(第 4 章 中有更多介绍)。
这一点非常重要,以至于如果您在前几次错过了,我会重复一遍:Python 中的一切都是对象。字符串是对象。列表是对象。函数是对象。甚至模块也是对象。
<< 记录函数 |
| 1 | 2 | 3 | 4 | 5 | 6 | |
代码缩进 >> |