Dive into Python 第二個程式 apihelper.py

來源:互聯網
上載者:User

這個程式相對複雜了點,先看程式

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 所以這裡的匿名函式自然也是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 技巧 並安全的使用它
•定義 匿名函式
•將函數賦值給變數 然後通過引用變數調用函數。 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.