python函數(shù)傳對象對性能有影響。在Python中,一切皆對象,Python參數(shù)傳遞采用的都是“傳對象引用”的方式。實際上,這種方式相當于傳值和傳引用的一種綜合。如果函數(shù)收到的是一個可變對象(比如字典或者列表)的引用,就能修改對象的原始值,相當于通過“傳引用”來傳遞對象。如果函數(shù)收到的是一個不可變對象(比如數(shù)字、字符或者元組)的引用,就不能直接修改原始對象,相當于通過“傳值’來傳遞對象,此時如果想改變這些變量的值,可以將這些變量申明為全局變量。
創(chuàng)新互聯(lián)建站于2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務公司,擁有項目網(wǎng)站建設(shè)、網(wǎng)站設(shè)計網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元平輿做網(wǎng)站,已為上家服務,為平輿各地企業(yè)和個人服務,聯(lián)系電話:18980820575
為了把類中的變量傳遞給類中的函數(shù),我們需要用到3個特定格式
① 第一個格式 @classmethod 的中文意思就是“類方法”,@classmethod聲明了函數(shù)1是類方法,這樣才能允許函數(shù)1使用類屬性中的數(shù)據(jù)。
② 第二個格式 cls 的意思是class的縮寫。如果類方法函數(shù)1想使用類屬性(也就是類中的變量),就要寫上cls為函數(shù)1的第一個參數(shù),也就是把這個類作為參數(shù)傳給自己,這樣就能被允許使用類中的數(shù)據(jù)。
③ 第三個格式是 cls.變量 。類方法想使用類屬性的時候,需要在這些變量名稱前加上cls. 這就好比類方法和類之間的約法三章,所以但凡有任何格式錯誤都會報錯。
如果缺①,即缺了“@classmethod”,類方法就不能直接利用類中的屬性,于是報錯
python的函數(shù)參數(shù)傳遞是"引用傳遞(地址傳遞)"。
python中賦值語句的過程(x = 1):先申請一段內(nèi)存分配給一個整型對象來存儲數(shù)據(jù)1,然后讓變量x去指向這個對象,實際上就是指向這段內(nèi)存(這里有點和C語言中的指針類似)。
在Python中,會為每個層次生成一個符號表,里層能調(diào)用外層中的變量,而外層不能調(diào)用里層中的變量,并且當外層和里層有同名變量時,外層變量會被里層變量屏蔽掉。函數(shù)? 調(diào)用 ?會為函數(shù)局部變量生成一個新的符號表。
局部變量:作用于該函數(shù)內(nèi)部,一旦函數(shù)執(zhí)行完成,該變量就被回收。
全局變量:它是在函數(shù)外部定義的,作用域是整個文件。全局變量可以直接在函數(shù)里面應用,但是如果要在函數(shù)內(nèi)部改變?nèi)肿兞?,必須使用global關(guān)鍵字進行聲明。
注意 :默認值在函數(shù)? 定義 ?作用域被解析
在定義函數(shù)時,就已經(jīng)執(zhí)行力它的局部變量
python中不可變類型是共享內(nèi)存地址的:把相同的兩個不可變類型數(shù)據(jù)賦給兩個不同變量a,b,a,b在內(nèi)存中的地址是一樣的。
函數(shù)是組織好的,可重復使用的,用來實現(xiàn)單一,或相關(guān)聯(lián)功能的代碼段。
函數(shù)能提高應用的模塊性,和代碼的重復利用率。你已經(jīng)知道Python提供了許多內(nèi)建函數(shù),比如print()。但你也可以自己創(chuàng)見函數(shù),這被叫做用戶自定義函數(shù)。
一、定義一個函數(shù)
你可以定義一個由自己想要功能的函數(shù),以下是簡單的規(guī)則:
1.函數(shù)代碼塊以def關(guān)鍵詞開頭,后接函數(shù)標識符名稱和圓括號()。
2.任何傳入?yún)?shù)和自變量必須放在圓括號中間。圓括號之間可以用于定義參數(shù)。
3.函數(shù)的第一行語句可以選擇性地使用文檔字符串—用于存放函數(shù)說明。
4.函數(shù)內(nèi)容以冒號起始,并且縮進。
5.Return[expression]結(jié)束函數(shù),選擇性地返回一個值給調(diào)用方。不帶表達式的return相當于返回 None。
語法
復制代碼代碼如下:
def functionname( parameters ):
"函數(shù)_文檔字符串"
function_suite
return [expression]
默認情況下,參數(shù)值和參數(shù)名稱是按函數(shù)聲明中定義的的順序匹配起來的。
實例
以下為一個簡單的Python函數(shù),它將一個字符串作為傳入?yún)?shù),再打印到標準顯示設(shè)備上。
復制代碼代碼如下:
def printme( str ):
"打印傳入的字符串到標準顯示設(shè)備上"
print str
return
二、函數(shù)調(diào)用
定義一個函數(shù)只給了函數(shù)一個名稱,指定了函數(shù)里包含的參數(shù),和代碼塊結(jié)構(gòu)。這個函數(shù)的基本結(jié)構(gòu)完成以后,你可以通過另一個函數(shù)調(diào)用執(zhí)行,也可以直接從Python提示符執(zhí)行。
如下實例調(diào)用了printme()函數(shù):
復制代碼代碼如下:
#!/usr/bin/python
# Function definition is here
def printme( str ):
"打印任何傳入的字符串"
print str;
return;
# Now you can call printme function
printme("我要調(diào)用用戶自定義函數(shù)!");
printme("再次調(diào)用同一函數(shù)");
#以上實例輸出結(jié)果:
#我要調(diào)用用戶自定義函數(shù)!
#再次調(diào)用同一函數(shù)
Python 的函數(shù)傳遞參數(shù):
Python 傳參數(shù)可以理解為 C 的 const 指針(your_type* const your_variable),它所指向的對象可以被修改產(chǎn)生副作用,但變量本身不能修改指向其他對象。這個和 C++ 的 reference 差不多。
所以如果一定要產(chǎn)生 C 的修改指針指向其他對象的效果,用 list、dict 或其他自定義的 mutable 對象包裝是一個辦法,但我認為這樣是一種不良實踐。在 C 語言中用參數(shù)輸出結(jié)果有非常多的理由:
C 語言沒有 tuple,不能返回多值,除非聲明一個 struct 類型。這種情況下劃分 in 參數(shù)和 out 參數(shù)成為一種慣例
C 語言沒有異常機制,返回值一般要保留給 errno
但這些情況在 Python 中都是不存在的