首页 > 代码库 > Python自省的威力
Python自省的威力
自省:是指代码可以查看内存中以对象形式存在的其它模块和函数,获取它们的信息,并对它们进行操作。
这种方法,你可以定义没有名称的函数,不按函数声明的参数顺序调用函数,甚至引用事先不知道名称的函数。
Python允许函数参数有缺省值;如果调用函数时不适用参数,参数将获得它的缺省值。同时还可以使用命名参数,以任意的顺序指定参数。(有默认值的参数,就是可选的参数。)
Python中的一部分内置函数:
- type函数
type函数可以接收任何东西作为参数,并返回它的数据类型。
- str函数
str函数将数据强制转换为字符串。每种数据类型都可以强制转换为字符串。
可以通过str函数来作用于模块,返回的是模块的路径名。
- dir函数
dir函数返回任意对象的属性和方法列表,包括模块对象、函数对象、字符串对象、列表对象、字典对象等等。
- callable函数
callable函数接收任何对象作为参数,如果参数对象是可调的,返回True,否则返回False。
一般的内置函数都归到__builtin__这个特殊的模块中。
- getattr函数
getattr函数可以返回一个直到运行时才直到名称的函数的引用。(函数的引用!)
getattr函数也支持缺省值。
Python中的过滤列表:
[mapping-expressionfor element in source-list if filter-expression]
前部分是列表解析,后部分是以if开头的过滤器的表达式。过滤器可以是返回值为真或者假的任何表达式。
Python中and和or的特殊性质:
在Python中,and和 or执行布尔逻辑运算。但是它们并不返回布尔值,而是返回它们实际进行比较的值之一。
布尔环境是从左到右执行的,返回的都是第一个不用比较的,而能确定布尔值的,实际值之一!!
and和 or可以构成很多种情况的无效场合,需要注意。
Python中的lambda函数:
Python支持这种很酷的语法,允许你快速定义单行的最小函数。
在理解整个以上的概念知识后,需要看懂如下的一段代码:
def info(object,spacing=10,collapse=1): '''Print methods and doc strings. Takes module, class, list, dictionary, or string. ''' methodlist=[method for method in dir(object) if callable(getattr(object,method))] processFunc=collapse and (lambda s: "".join(s.split())) or (lambda s: s) print "\n".join(["%s%s"% (method.ljust(spacing), processFunc(str(getattr(object,method)._doc_))) for method in methodlist ]) if __name__ == "__main__": print info.__doc__
2014/8/18