談談 Python 程式的執行原理

2021-08-21 05:40:33 字數 4028 閱讀 6786

原先用的都是c/c++,對於python內部的執行機制還不是很了解,在這裡貼一篇python執行機制的文章作為參考。

1

23

[foo.py]

defadd

(a, b):

return a + b

123

4567

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
123

4567

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])

123

4

s = open('demo.py').read()

co = compile(s, 'demo.py', 'exec')

import dis

dis.dis(co)

123

4567

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

123

4

def

fun1

(a):

deffun2

():# a 位於外部巢狀函式的命名空間

print(a)

123

456

a = 1

deffun

():# 需要通過 global 指令來宣告全域性變數

global a

# 修改全域性變數,而不是建立乙個新的 local 變數

a = 2

123

4567

891011

12

>>> a = 1

>>> id(a)

40059744

>>> b = 1

>>> id(b)

40059744

>>> c = 257

>>> id(c)

41069072

>>> d = 257

>>> id(257)

41069096

123

456

>>> a = 'a'

>>> b = 'a'

>>> id(a)

14660456

>>> id(b)

14660456

123

4567

8

>>> a = 'a string'

>>> b = 'a string'

>>> a is b

false

>>> a = intern('a string') # 手動呼叫 intern 方法

>>> b = intern('a string')

>>> a is b

true

1

2

import sys

sys.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 的空間!這句話對嗎?計算...