新聞中心
這是Python解釋器簡介的第二部分。***部分請點擊這里 。

目前創(chuàng)新互聯(lián)建站已為上1000家的企業(yè)提供了網(wǎng)站建設、域名、虛擬空間、網(wǎng)站改版維護、企業(yè)網(wǎng)站設計、駐馬店網(wǎng)站維護等服務,公司將堅持客戶導向、應用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
完成編譯之前的三個步驟都是在檢查一個簡單的函數(shù)對象。我們現(xiàn)在來談談更深層次的對象——函數(shù)的代碼對象。
- >>> def foo(a):
- ... x = 3
- ... return x + a
- ...
- >>> foo
- >>> foo.func_code
", line 1>
從上面的代碼,你能發(fā)現(xiàn)所謂的代碼對象就是函數(shù)對象的一個屬性。(這個函數(shù)對象還有許多其它的屬性,但它們大多都很無聊,因為 foo 函數(shù)實在是太簡單了。)
代碼對象是在Python編譯器中生成的,并且在解釋器中完成解釋工作。它向解釋器傳遞“開工了”的信息。我們再來看看代碼對象的屬性。
- >>> dir(foo.func_code)
- ['__class__', '__cmp__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__',
- '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__',
- '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__',
- '__subclasshook__', 'co_argcount', 'co_cellvars', 'co_code', 'co_consts', 'co_filename',
- 'co_firstlineno', 'co_flags', 'co_freevars', 'co_lnotab', 'co_name', 'co_names', 'co_nlocals',
- 'co_stacksize', 'co_varnames']
這個屬性列表雖然很長,但是其中大多數(shù)屬性我們今天并不會涉及。我們只關注3個有趣的 foo 函數(shù)代碼對象的屬性。
- >>> foo.func_code.co_varnames
- ('a', 'x')
- >>> foo.func_code.co_consts
- (None, 3)
- >>> foo.func_code.co_argcount
- 1
通過調用它們,我們能依次得到:變量名、函數(shù)中已知的常量和函數(shù)參數(shù)的數(shù)量。但是目前為止,我們還是不知道生成代碼對象的指令到底是什么。事實上,這個指令叫做字節(jié)碼。字節(jié)碼也是代碼對象的一個屬性:
- >>> foo.func_code.co_code
- 'd\x01\x00}\x01\x00|\x01\x00|\x00\x00\x17S'
我們得到了許多待分解的信息。這里到底發(fā)生了什么?在下一部分,我們將深入研究字節(jié)碼。
原文鏈接:http://blog.jobbole.com/56300/
網(wǎng)站題目:Python解釋器簡介(2):代碼對象
鏈接分享:http://www.5511xx.com/article/cocedhc.html


咨詢
建站咨詢
