函數參數傳遞機制問題在本質上是調用函數(過程)和被調用函數(過程)在調用發生時進行通信的方法問題?;镜膮祩鬟f機制有兩
創新互聯建站主要從事成都網站建設、成都網站設計、網頁設計、企業做網站、公司建網站等業務。立足成都服務鎮海,十載網站建設經驗,價格優惠、服務專業,歡迎來電咨詢建站服務:18980820575
種:值傳遞和引用傳遞。
推薦:Python教程
值傳遞(passl-by-value)過程中,被調函數的形式參數作為被調函數的局部變量處理,即在堆棧中開辟了內存空間以存放由主調函數放
進來的實參的值,從而成為了實參的一個副本。值傳遞的特點是被調函數對形式參數的任何操作都是作為局部變量進行,不會影響主調函
數的實參變量的值。
引用傳遞(pass-by-reference)過程中,被調函數的形式參數雖然也作為局部變量在堆棧中開辟了內存空間,但是這時存放的是由主調函
數放進來的實參變量的地址。被調函數對形參的任何操作都被處理成間接尋址,即通過堆棧中存放的地址訪問主調函數中的實參變量。正
因為如此,被調函數對形參做的任何操作都影響了主調函數中的實參變量。
更多技術請關注Python視頻教程。
為了把類中的變量傳遞給類中的函數,我們需要用到3個特定格式
① 第一個格式 @classmethod 的中文意思就是“類方法”,@classmethod聲明了函數1是類方法,這樣才能允許函數1使用類屬性中的數據。
② 第二個格式 cls 的意思是class的縮寫。如果類方法函數1想使用類屬性(也就是類中的變量),就要寫上cls為函數1的第一個參數,也就是把這個類作為參數傳給自己,這樣就能被允許使用類中的數據。
③ 第三個格式是 cls.變量 。類方法想使用類屬性的時候,需要在這些變量名稱前加上cls. 這就好比類方法和類之間的約法三章,所以但凡有任何格式錯誤都會報錯。
如果缺①,即缺了“@classmethod”,類方法就不能直接利用類中的屬性,于是報錯
函數是組織好,可重復使用的,用來實現相關功能的代碼段
函數提高了代碼的重復利用率和應用的模塊性。
除Python自帶的函數之外,也可以自己創建函數,叫做自定義函數
語法:
函數代碼塊以 def 開頭
參數為 輸入值 ,放于函數名后口號里面,
函數內容以冒號:開始,函數體縮進, return 返回 輸出值
函數調用使用關鍵字參數來確定傳入的參數值,此時,如果多個函數則不需要按照指定順序。
在定義函數時,指定參數默認值。調用時如果不傳入參數,則使用默認值
不定長部分如果沒有指定參數,傳入是一個空元組
加了 兩個星號 ** 的參數會以字典的形式導入
/ 用來指明函數形參必須使用指定位置參數,不能使用關鍵字參數的形式。
3.8版本之后的才能使用
不使用 def 定義函數,沒有函數名
lamdba主體時一個表達式,而不是代碼塊,函數體比def簡單很多
定義在函數內部的為局部變量,僅能在函數內部使用
定義在函數外部的為全局變量,可在全局使用
模塊是將包含所有定義的函數和變量的文件,一般將同類功能的函數組和在一起稱為模塊。
模塊需要導入后,在調用相應函數進行使用
模塊導入的方法:
從模塊中導入一個指定的部分
把一個模塊的所有內容全都導入
函數是組織好的,可重復使用的,用來實現單一,或相關聯功能的代碼段。
函數能提高應用的模塊性,和代碼的重復利用率。你已經知道Python提供了許多內建函數,比如print()。但你也可以自己創見函數,這被叫做用戶自定義函數。
一、定義一個函數
你可以定義一個由自己想要功能的函數,以下是簡單的規則:
1.函數代碼塊以def關鍵詞開頭,后接函數標識符名稱和圓括號()。
2.任何傳入參數和自變量必須放在圓括號中間。圓括號之間可以用于定義參數。
3.函數的第一行語句可以選擇性地使用文檔字符串—用于存放函數說明。
4.函數內容以冒號起始,并且縮進。
5.Return[expression]結束函數,選擇性地返回一個值給調用方。不帶表達式的return相當于返回 None。
語法
復制代碼代碼如下:
def functionname( parameters ):
"函數_文檔字符串"
function_suite
return [expression]
默認情況下,參數值和參數名稱是按函數聲明中定義的的順序匹配起來的。
實例
以下為一個簡單的Python函數,它將一個字符串作為傳入參數,再打印到標準顯示設備上。
復制代碼代碼如下:
def printme( str ):
"打印傳入的字符串到標準顯示設備上"
print str
return
二、函數調用
定義一個函數只給了函數一個名稱,指定了函數里包含的參數,和代碼塊結構。這個函數的基本結構完成以后,你可以通過另一個函數調用執行,也可以直接從Python提示符執行。
如下實例調用了printme()函數:
復制代碼代碼如下:
#!/usr/bin/python
# Function definition is here
def printme( str ):
"打印任何傳入的字符串"
print str;
return;
# Now you can call printme function
printme("我要調用用戶自定義函數!");
printme("再次調用同一函數");
#以上實例輸出結果:
#我要調用用戶自定義函數!
#再次調用同一函數
Python 的函數傳遞參數:
Python 傳參數可以理解為 C 的 const 指針(your_type* const your_variable),它所指向的對象可以被修改產生副作用,但變量本身不能修改指向其他對象。這個和 C++ 的 reference 差不多。
所以如果一定要產生 C 的修改指針指向其他對象的效果,用 list、dict 或其他自定義的 mutable 對象包裝是一個辦法,但我認為這樣是一種不良實踐。在 C 語言中用參數輸出結果有非常多的理由:
C 語言沒有 tuple,不能返回多值,除非聲明一個 struct 類型。這種情況下劃分 in 參數和 out 參數成為一種慣例
C 語言沒有異常機制,返回值一般要保留給 errno
但這些情況在 Python 中都是不存在的
當函數要接受元組或者字典參數時,它分別使用 * 和 ** 前綴。
在變量前 加 ,則輸入的函數參數會作為一個元組存在args中, 多余的參數 *也會存在args中,如:
如果使用******前綴,輸入的參數會被存放在字典中, 多余的參數 也會存在kwargs中,kwargs為一個字典
分享題目:python函數傳入變量,python函數變量傳遞
文章網址:http://m.kartarina.com/article22/dseedcc.html
成都網站建設公司_創新互聯,為您提供網站制作、移動網站建設、App設計、企業網站制作、網站內鏈、網站維護
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯