Dive into Python 第二个程序 apihelper.py

这个程序相对复杂了点,先看程序

def info(object, spacing = 10, collapse = 1):

    """Print methods and doc strings.

    Takes modules, class, list, dictionary, or string."""

    methodList = [method for method in dir(object) if hasattr(getattr(object, method), '__call__')]

    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__)



这里我都做了一点变化来适应python 3的程序 

需要注意几点:

python 3里不支持这个全局函数 callable了

callable() global function

In Python 2, you could check whether an object was callable (like a function) with the global callable() function. In Python 3, this global function has been eliminated. To check whether an object is callable, check for the existence of the __call__() special method.

 

python 2 : callable(anything)

python 3: hasattr(anything, '__call__')

 

 

对于这一句的理解

processFunc = collapse and (lambda s : " ".join(s.split())) or (lamdba s : s)

 

几个知识点:

一, and

python 里面为false的只有这几个 0,"", [], (), {} 其他都为true 所以这里的lambda 函数自然也是true。 有多个一起进行and操作的时候,如果都为真,则返回最后一个。

 

二, split()函数

split()不带参数,它按空白进行分割

 

三, lambda函数

lambda函数用于进行快速定义函数 下面的是等价的

def f(x):

    return x*2

f(2)

这个等价于:

g = lambda x : x*2

g(2)

或者 (lambda x: x*2)(2)

 

processFunc的作用现在就看的很明白了。如果collapse为true,则将processFunc(string)里面的string 压缩空白, 如果collapse为false, 则直接返回不改变的参数。

 

解释下面这句:

print("\n".join(["%s %s" %(method.ljust(spacing), processFunc(str(getattr(object, method).__doc__))) for method in methodList]))

 

这个里面有几个知识点:

一,ljust()函数

用空格填充字符串以符合指定长度

 

二, str(getattr(object, method).__doc__)

如果method没有定义doc属性,是得不到一个None值的,但是用str()方法就可以得到一个None。

 

 

在研究下一章前,确保你可以无困难的完成下面这些事情:

•用可选和命名参数定义和调用函数
•用 str 强制转换任意值为字符串形式
•用 getattr 动态得到函数和其它属性的引用
•扩展列表解析语法实现 列表过滤
•识别 and-or 技巧 并安全的使用它
•定义 lambda 函数
•将函数赋值给变量 然后通过引用变量调用函数。 



你可能感兴趣的:(python)