python中的代碼對象

來源:互聯網
上載者:User

可調用的對象是python執行環境中最重要的部分,python語句,賦值,運算式,模組等,這些

對象只是構成可執行代碼塊的拼圖的很少的一部分,而這些代碼塊被稱為代碼對象。 每個可調用的對象的核心都是代碼對象。一般來說,代碼對象可以作為函數或者方法調用的一部分來執行,也可以用exec語句或者是內建函數eval()來執行。從整體上來看,一個python模組的代碼對象,

是構成該模組的全部代碼。 如果要執行python代碼,那麼該代碼必須先要轉換成位元組編譯的代碼,這才是真正的代碼對象。然而,它們不包含任何關於它們執行環境的資訊,這便是可調用物存在的原因,它被用來封裝一個代碼對象並提供額外的資訊。udf.func_code就是代碼對象,使用者定義函數函數對象是代碼對象的封裝,而方法則是函數對象的封裝。 python提供了很多內建函數來支援可調用/執行對象,其中exec用來執行代碼對象,complie用於產生代碼對象。
  • callable(obj) 判斷obj是否可調用。是的話,返回True;否則False
  • compile(string, file, type) 從type類型中建立代碼對象;file是代碼存放的地方,通常設為''
最後的type有三種類型:'eval' 可求值的運算式(和eval()一起用)'single' 單一可執行語句(和exec一起用)'exec' 可執行語句組(和exec一起用)
  • eval(obj, globals=globals(), locals=locals())
對obj進行求值,obj是已編譯為代碼對象的運算式,或是一個字串運算式;全域和局部變數是可選使用整數,反而報錯,只接受字串和代碼對象。
  • exec obj
執行代碼對象或者是字串,也可以是一個檔案對象(已經開啟的有效python指令碼)還可以支援指令檔對象>>>f = open('try.py')>>>exec f#顯示執行>>>exec f #再次調用沒反應,這是因為檔案指標已經指向檔案的末尾>>> f.tell() #返回當前檔案指標的位置>>> f.seek(0) #重新回到檔案頭>>> exec f #又執行成功>>> f.close() #記得關閉檔案
  • input(promp='') 等同於eval(raw_input(promt=''))
 可以看出input會對輸入進行eval,而raw_input只是單純的字串 利用exec來控制碼測試#!/usr/bin/env python

def foo():
    return True

def bar():
    'bar() does not do much'
    return 

foo.__doc__ = 'foo() does not do much'
#把測試代碼用字串表示 
foo.tester = """
if foo():
    print 'PASSED'
else:
    print 'FAILED'
"""

# dir()取得當前命名空間的對象列表
for eachAttr in dir():
    obj = eval(eachAttr)
    # 控制只運行函數類型 
    if isinstance(obj, type(foo)):
        if hasattr(obj, '__doc__'):
            print '\nFunction "%s" has a doc string :\n\t%s' % (eachAttr, obj.__doc__)
        if hasattr(obj, 'tester'):
            print 'Function "%s" has a tester... executin' % eachAttr
            exec obj.tester
        else:
            print 'Function "%s" has no tester... skipping' % eachAttr
    else:
         print '"%s" is not a function' % eachAttr

通過 為知筆記 發布

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.