首页 > 代码库 > Python自省的威力

Python自省的威力

自省:是指代码可以查看内存中以对象形式存在的其它模块和函数,获取它们的信息,并对它们进行操作。

这种方法,你可以定义没有名称的函数,不按函数声明的参数顺序调用函数,甚至引用事先不知道名称的函数。

 

Python允许函数参数有缺省值;如果调用函数时不适用参数,参数将获得它的缺省值。同时还可以使用命名参数,以任意的顺序指定参数。(有默认值的参数,就是可选的参数。)

 

Python中的一部分内置函数

  1. type函数

type函数可以接收任何东西作为参数,并返回它的数据类型。

  1. str函数

str函数将数据强制转换为字符串。每种数据类型都可以强制转换为字符串。

可以通过str函数来作用于模块,返回的是模块的路径名。

  1. dir函数

dir函数返回任意对象的属性和方法列表,包括模块对象、函数对象、字符串对象、列表对象、字典对象等等。

  1. callable函数

callable函数接收任何对象作为参数,如果参数对象是可调的,返回True,否则返回False

 

一般的内置函数都归到__builtin__这个特殊的模块中。

  1. getattr函数

getattr函数可以返回一个直到运行时才直到名称的函数的引用。(函数的引用!)

getattr函数也支持缺省值。

 

Python中的过滤列表

[mapping-expressionfor element in source-list if filter-expression]

前部分是列表解析,后部分是以if开头的过滤器的表达式。过滤器可以是返回值为真或者假的任何表达式。

 

Pythonandor的特殊性质:

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