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开头的过滤器的表达式。过滤器可以是返回值为真或者假的任何表达式。

            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

相关内容

    暂无相关文章

评论关闭