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