首页 > 深入Python > 自省的威力 > type, str, dir, 和其它内置函数 | << >> | ||||
diveintopython.org Python for experienced programmers |
Python有小部分相当有用的内置函数。其它的所有函数都划分到不同的模块中去了。这一点实际上是有意识的设计决定,是为了保证核心语言避免象其它脚本语言一样变得臃肿(咳,咳,VB)。
type 函数返回任意对象的数据类型。可能的类型列在了 types 模块内。这些类型对帮助者(helper)函数有用,可以处理几种数据类型。
>>> type(1) <type 'int'> >>> li = [] >>> type(li) <type 'list'> >>> import odbchelper >>> type(odbchelper) <type 'module'> >>> import types >>> type(odbchelper) == types.ModuleType 1
type 接收任何事物,并且返回它的数据类型。我的意思是任何东西。整数,字符串,列表,字典,序列,函数,类,模块,甚至类型。 |
|
type 可以接收变量并返回它的数据类型。 | |
type 也可以用于模块。 | |
你可以使用 types 模块中的常量用来比较对象的类型。这就是 help 函数所做的,这一点很快会看到。 |
str 强制将数据转化为字符串。每一种数据类型都可以被转化为字符串。
>>> str(1) '1' >>> horsemen = ['war', 'pestilence', 'famine'] >>> horsemen.append('Powerbuilder') >>> str(horsemen) "['war', 'pestilence', 'famine', 'Powerbuilder']" >>> str(odbchelper) "<module 'odbchelper' from 'c:\\docbook\\dip\\py\\odbchelper.py'>" >>> str(None) 'None'
help 函数的核心是强大的 dir 函数。dir 返回任意一个对象的属性和方法的列表:模块,函数,字符串,列表,字典...相当多的东西。
>>> li = [] >>> dir(li) ['append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] >>> d = {} >>> dir(d) ['clear', 'copy', 'get', 'has_key', 'items', 'keys', 'setdefault', 'update', 'values'] >>> import odbchelper >>> dir(odbchelper) ['__builtins__', '__doc__', '__file__', '__name__', 'buildConnectionString']
li 是一个列表,所以 dir(li) 返回列表所有方法的一个列表。注意返回的列表包含着字符串表示的方法的名字,而不是方法自身。 |
|
d 是一个字典,所以 dir(d) 返回字典方法的名字的列表。其中至少有一个方法,keys,应该看上去熟悉。 |
|
这里就是真正变得有趣的地方。odbchelper 是一个模块,所以 dir(odbchelper) 返回在模块中定义的所有东西的列表,包括内置属性,象 __name__ 和 __doc__,和你定义的属性和方法其它什么的。在这个例子中,odbchelper 仅有一个用户自定义方法,buildConnectionString 函数,我们在开始了解Python中学过的。 |
最后,callable 函数接收一个对象,并当对象可以调用时返回 1 ,其它情况下返回 0 。可调用对象包括函数、类方法,至甚是类本身。(更多关于类的内容在第三章)
>>> import string >>> string.punctuation '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~' >>> string.join <function join at 00C55A7C> >>> callable(string.punctuation) 0 >>> callable(string.join) 1 >>> print string.join.__doc__ join(list [,sep]) -> string Return a string composed of the words in list, with intervening occurrences of sep. The default separator is a single space. (joinfields and join are synonymous)
在 string 中的函数不受重视(尽管许多人仍然使用 join 函数),但是这个模块包含了大量有用的常量,象 string.punctuation,它包含了所有标准的标点符号字符。 | |
string.join 是一个可以将字符串列表连接的函数。 | |
string.punctuation 不是一个可调用对象,它是一个字符串。(字符串的确有可调用的方法,但字符串本身是不可调用的。) | |
string.join 是可调用的,它是一个接收两个参数的函数。 | |
任何可调用对象都可以有一个文档字符串。对一个对象的每个属性都使用 callable 函数,就可以不用事先了解对象,我们就可以决定哪些属性是我们所关心的(方法、函数、类),哪些属性是我们想忽略的(常量,等等)。 |
type,str,dir,和所有其它的Python内置函数被组合进一个名叫 __builtins__ 的特别模块中。(它在前后有两个下划线。)如果有帮助的话,你可以认为Python在启动时自动地执行 from __builtins__ import * ,这样就导入了所有内置的函数到名字空间中,所以你可以直接使用它们。
象这样考虑的好处是,你可以通过得到 __builtins__ 的信息,作为一个组,存取所有内置的函数和属性。猜到什么了吗?我们有一个实现那个功能的函数,它叫做 help。自已试一下然后现在完全忽略列表;在后面我们将深入到一些更重要的功能。(一些内置错误类,象 AttributeError,应该看上去已经熟悉了。)
>>> from apihelper import help >>> help(__builtins__, 20) ArithmeticError Base class for arithmetic errors. AssertionError Assertion failed. AttributeError Attribute not found. EOFError Read beyond end of file. EnvironmentError Base class for I/O related errors. Exception Common base class for all exceptions. FloatingPointError Floating point operation failed. IOError I/O operation failed. [...snip...]
Python附带了出色的参考手册,你应该十分仔细地阅读它们,学习Python所提供的所有的模块。对于大多数语言,你会发现自已要经常回头参考手册(或man文档,或上帝来帮助你,MSDN)来提醒自已如何使用这些模块,而Python大部分是自我文档化的。 |
进一步阅读
可选和定名参数 |
1 2 3 4 5 6 7 8 9 |
使用 getattr 得到对象的引用 |