首先你要明白,Python的函數傳遞方式是賦值,而賦值是通過建立變量與對象的關聯(lián)實現的。

10年積累的做網站、網站建設經驗,可以快速應對客戶對網站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網絡服務。我雖然不認識你,你也不認識我。但先網站設計后付款的網站建設流程,更有仲巴免費網站建設讓你可以放心的選擇與我們合作。
對于你的代碼:
執(zhí)行 d = 2時,你在__main__里創(chuàng)建了d,并讓它指向2這個整型對象。
執(zhí)行函數add(d)過程中:
d被傳遞給add()函數后,在函數內部,num也指向了__main__中的2
但執(zhí)行num = num + 10之后,新建了對象12,并讓num指向了這個新對象——12。
如果你明白函數中的局部變量與__main__中變量的區(qū)別,那么很顯然,在__main__中,d仍在指著2這個對象,它沒有改變。因此,你打印d時得到了2。
如果你想讓輸出為12,最簡潔的辦法是:
在函數add()里增加return num
調用函數時使用d = add(d)
代碼如下:
def add(num):
num += 10
return num
d = 2
d = add(d)
print d
python的函數參數傳遞是"引用傳遞(地址傳遞)"。
python中賦值語句的過程(x = 1):先申請一段內存分配給一個整型對象來存儲數據1,然后讓變量x去指向這個對象,實際上就是指向這段內存(這里有點和C語言中的指針類似)。
在Python中,會為每個層次生成一個符號表,里層能調用外層中的變量,而外層不能調用里層中的變量,并且當外層和里層有同名變量時,外層變量會被里層變量屏蔽掉。函數? 調用 ?會為函數局部變量生成一個新的符號表。
局部變量:作用于該函數內部,一旦函數執(zhí)行完成,該變量就被回收。
全局變量:它是在函數外部定義的,作用域是整個文件。全局變量可以直接在函數里面應用,但是如果要在函數內部改變全局變量,必須使用global關鍵字進行聲明。
注意 :默認值在函數? 定義 ?作用域被解析
在定義函數時,就已經執(zhí)行力它的局部變量
python中不可變類型是共享內存地址的:把相同的兩個不可變類型數據賦給兩個不同變量a,b,a,b在內存中的地址是一樣的。
def a(): global q q=1+2 return q def b(): a() c=2+q print(c) b()5 q3 函數中的變量在外面調用,需要申明為全局變量
對于可變參數默認是引用傳值, 但是不能去修改它的指向, 一旦修改就是按值傳遞.
#?coding=utf-8
def?f(a):
a?=?[0]
print(a)
if?__name__?==?'__main__':
a?=?[1,?2,?3]
f(a)
print(a)
上面的代碼對a重新賦值, 試圖改變a的指向, 那么這時的a就是一個新的局部變量, 而非全局變量a
像a[0] = 100, a.append(0)的操作不會觸發(fā)上述規(guī)則, 和你的輸出一樣
文章題目:python求傳遞函數 python傳遞函數對象
當前URL:http://chinadenli.net/article6/dojgsig.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站策劃、外貿建站、企業(yè)網站制作、定制網站、建站公司、電子商務
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)