59 函式也是物件,記憶體底層分析

2021-10-23 15:22:50 字數 1647 閱讀 4906

python中,「一切都是物件」。實際上,執行def定義函式後,系統就建立了相應的函式 物件。我們執行如下程式,然後進行解釋:

def

print_star

(n):

print

("*"

*n)print

(print_star)

print(id

(print_star)

)c = print_starc(3

)

執行結果:

>

45844000

***

上面**執行def時,系統中會建立函式物件,並通過print_star這個變數進行引用

我們執行「c=print_star」後,顯然將print_star變數的值賦給了變數c,記憶體圖變成了:

顯然,我們可以看出變數cprint_star都是指向了同乙個函式物件。因此,執行c(3)和執 行 print_star(3)的效果是完全一致的。 python 中,圓括號意味著呼叫函式。在沒有圓括 號的情況下,python會把函式當做普通物件

與此核心原理類似,我們也可以做如下操作:

zhengshu =

int

zhengshu(

"234"

)in [17]

: zhengshu =

intin [18]

: zhengshu(

"234"

)out[18]

:234

in [19]

:

顯然,我們將內建函式物件int()賦值給了變數zhengshu,這樣zhengshuint都是指向 了同乙個內建函式物件。當然,此處僅限於原理性講解,實際開發中沒必要這麼做。

def

print_star

(n):

print

('*'

*n)print_star(1)

# *c = print_starc(2

)# **

print(id

(print_star)

)# 19848480

print(id

(c))

# 19848480

print

(type

(c))

# 這也是函式

fun和fun 的區別,函式也是物件

定義函式的3種方式 1 不常用 var fun new function console.log hello 這是我的第乙個函式 2 使用函式宣告 function 函式名 形參1,形參2.形參n 3 使用函式表示式 var 函式名 function 形參1,形參2.形參n 除5種基本型別以外的其他...

物件記憶體模型(虛函式,虛函式表,虛指標)

從例子入手,考察如下帶有虛函式的類的物件記憶體模型 1 class a 11 12 class b a 20 21 class c b 注 在子類中出現與父類相同名稱的變數和非虛函式不是最佳實踐,這裡是為了說明其記憶體結構。其物件記憶體結構見下圖。於侯捷老師 對其分析如下 1.每個含有虛函式的類在記...

C 物件的記憶體分布和虛函式表

c 中乙個類中無非有四種成員 靜態資料成員和非靜態資料成員,靜態函式和非靜態函式。1.非靜態資料成員被放在每乙個物件體內作為物件專有的資料成員。2.靜態資料成員被提取出來放在程式的靜態資料區內,為該類所有物件共享,因此只存在乙份。3.靜態和非靜態成員函式最終都被提取出來放在程式的 段中並為該類所有物...