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
,記憶體圖變成了:
顯然,我們可以看出變數c
和print_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
,這樣zhengshu
和int
都是指向 了同乙個內建函式物件
。當然,此處僅限於原理性講解,實際開發中沒必要這麼做。
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.靜態和非靜態成員函式最終都被提取出來放在程式的 段中並為該類所有物...