原先用的都是c/c++,對於python內部的執行機制還不是很了解,在這裡貼一篇python執行機制的文章作為參考。
123
[foo.py]defadd
(a, b):
return a + b
1234567
891011
1213
1415
16
[demo.py]import foo
a = [1, 'python']
a = 'a string'
deffunc
():a = 1
b = 257
print(a + b)
print(a)
if __name__ == '__main__':
func()
foo.add(1, 2)
python demo.py
a string
258
python generate_pyc.py module_name
python generate_pyc.py demo
1234567
891011
1213
14
[generate_pyc.py]import imp
import sys
defgenerate_pyc
(name):
fp, pathname, description = imp.find_module(name)
try:
imp.load_module(name, fp, pathname, description)
finally:
if fp:
fp.close()
if __name__ == '__main__':
generate_pyc(sys.argv[1])
1234
s = open('demo.py').read()co = compile(s, 'demo.py', 'exec')
import dis
dis.dis(co)
1234567
891011
1213
1415
1617
1819
2021
2223
2425
2627
2829
3031
3233
3435
3637
3839
1 0 load_const 0 (-1)3 load_const 1 (none)
6 import_name 0 (foo)
9 store_name 0 (foo)
3 12 load_const 2 (1)
15 load_const 3 (u'python')
18 build_list 2
21 store_name 1 (a)
4 24 load_const 4 (u'a string')
27 store_name 1 (a)
6 30 load_const 5 ()
33 make_function 0
36 store_name 2 (func)
11 39 load_name 1 (a)
42 print_item
43 print_newline
13 44 load_name 3 (__name__)
47 load_const 6 (u'__main__')
50 compare_op 2 (==)
53 pop_jump_if_false 82
14 56 load_name 2 (func)
59 call_function 0
62 pop_top
15 63 load_name 0 (foo)
66 load_attr 4 (add)
69 load_const 2 (1)
72 load_const 7 (2)
75 call_function 2
78 pop_top
79 jump_forward 0 (to 82)
>> 82 load_const 1 (none)
85 return_value
1234
deffun1
(a):
deffun2
():# a 位於外部巢狀函式的命名空間
print(a)
123456
a = 1deffun
():# 需要通過 global 指令來宣告全域性變數
global a
# 修改全域性變數,而不是建立乙個新的 local 變數
a = 2
1234567
891011
12
>>> a = 1>>> id(a)
40059744
>>> b = 1
>>> id(b)
40059744
>>> c = 257
>>> id(c)
41069072
>>> d = 257
>>> id(257)
41069096
123456
>>> a = 'a'>>> b = 'a'
>>> id(a)
14660456
>>> id(b)
14660456
1234567
8
>>> a = 'a string'>>> b = 'a string'
>>> a is b
false
>>> a = intern('a string') # 手動呼叫 intern 方法
>>> b = intern('a string')
>>> a is b
true
12
import syssys.getcheckinterval() # 100
引用計數無法解決迴圈引用問題
python 官方文件
Python程式的執行原理
1.過程概述 python先把 py檔案 編譯成位元組碼,交給位元組碼虛擬機器,然後虛擬機器一條一條執行位元組碼指令,從而完成程式的執行。2.位元組碼 位元組碼在python虛擬機器程式裡對應的是pycodeobject物件。pyc檔案是位元組碼在磁碟上的表現形式。3.pyc檔案 pycodeobj...
Python程式執行原理
執行步驟大概如下 1.作業系統會讓cpu把python直譯器的程式複製到記憶體中。2.python直譯器會根據語法規則,從上向下讓cpu翻譯python中的 3.cpu負責執行翻譯完的 python直譯器有多大?拷貝到記憶體中是否會對記憶體有較大影響?1.確認直譯器所在位置 which python...
Python基礎 程式執行原理
計算機中的 三大件 計算機中包含有較多的硬體,但是乙個程式要執行,有 三個 核心的硬體,分別是 cpu 記憶體 硬碟 計算機中哪乙個硬體裝置負責執行程式?記憶體 的速度快還是 硬碟 的速度快?我們的程式是安裝在記憶體中的,還是安裝在硬碟中的?我買了乙個記憶體條,有 500g 的空間!這句話對嗎?計算...