python 位元組碼 優化 位元組碼優化

2021-10-17 01:21:02 字數 729 閱讀 4150

python是一種動態語言。這意味著您在編寫**方面有很大的自由度。由於python公開了大量的自省(順便說一句,這非常有用),許多優化根本無法執行。例如,在第乙個示例中,python無法知道呼叫它時list是什麼資料型別。我可以建立乙個非常奇怪的類:class crazylist(object):

print "hello world"

我們可以為+=寫乙個類似的例子(如果「編譯器」優化了它,它可能會產生一些***,而這些***是不會被執行的)。在

為了有效地優化,python必須知道你的型別。。。對於絕大多數**,它沒有(傻瓜證明)的方法來獲取型別資料,所以它甚至不嘗試大多數優化。在

也就是說,有一些優化可以由「編譯器」在稱為「窺視孔優化器」的階段安全地完成。e、 g.它將為您做一些簡單的恆定摺疊:

^$在某些情況下,它會快取值以備以後使用,或將一種型別的物件轉換為另一種型別的物件:>>> def translate_tuple(a):

... return a in [1, 3]

>>> import dis

>>> dis.dis(translate_tuple)

2 0 load_fast 0 (a)

3 load_const 3 ((1, 3))

6 compare_op 6 (in)

9 return_value

(注意,列表被轉換成tuple,並快取在python3.2+set文字也可以轉換成frozenset並進行快取)。在

python位元組碼 Python位元組碼簡介

python位元組碼 如果您曾經編寫過python,或者甚至只是使用過python,那麼您可能已經習慣了檢視python源 檔案。它們的名稱以.py結尾。而且您可能還看到了另一種型別的檔案,其名稱以.pyc結尾,並且您可能已經聽說它們是python的 位元組碼 檔案。這些在python 3上很難看到...

python 位元組碼

python位元組碼 hello.py usr bin env python coding utf 8 import m 呼叫m裡的方法 執行之後會生成乙個m.pyc檔案 如果將m.py檔案刪除,只留hello.py和m.pyc檔案,同樣能執行出效果 對於hello.py m.py m.pyc 三個...

Python位元組碼介紹

如果你曾經編寫過 python,或者只是使用過 python,你或許經常會看到 python 源 檔案 它們的名字以 py 結尾。你可能還看到過其它型別的檔案,比如以 pyc 結尾的檔案,或許你可能聽說過它們就是 python 的 位元組碼bytecode 檔案。在 python 3 上這些可能不容...