本文是python入門到函式遇到的疑惑。
下面一段是基礎教程的原文python函式。
所有引數(自變數)在python裡都是按引用傳遞。如果你在函式裡修改了引數,那麼在呼叫這個函式的函式裡,原始的引數也被改變了。例如:
#!/usr/bin/python
# 可寫函式說明
def changeme( mylist ):
"修改傳入的列表"
print "函式內取值: ", mylist
return
# 呼叫changeme函式
mylist = [10,20,30];
changeme( mylist );
print "函式外取值: ", mylist
傳入函式的和在末尾新增新內容的物件用的是同乙個引用。故輸出結果如下:
函式內取值: [10, 20, 30, [1, 2, 3, 4]]
函式外取值: [10, 20, 30, [1, 2, 3, 4]]
好,看到這裡,自己親手測試一下,**:
def printme(age,str):
str = 'str changed!'
print age,str
return
str = 'ori str'
age = 23
printme(age,str)
print str
輸出結果:
23 str changed!
ori str
好像**不對啊!不是說函式內部修改了引數的值,那麼實際引數也會變嗎?!難道它對字串和列表等還不是同等對待?
有經驗的人都知道,
在python中,strings, tuples, 和numbers是不可更改的物件,而list,dict等則是可以修改的物件。
那麼,就記住紅色文字的這句話吧,你想修改不可更改的物件時,其實就開闢了乙個新的儲存空間新的物件,這就是為什麼還有個全域性作用域和區域性作用域的問題。
Python函式引數到底是按值還是按引用
本文是python入門到函式遇到的疑惑。下面一段是基礎教程的原文python函式。所有引數 自變數 在python裡都是按引用傳遞。如果你在函式裡修改了引數,那麼在呼叫這個函式的函式裡,原始的引數也被改變了。例如 python view plain copy usr bin python 可寫函式說...
Lambda函式到底是個什麼
lambda函式是指簡單的 片段,通常認為是不值得命名的函式,它不能重複使用,能方便程式設計師使用,增強 可讀性,降低 出錯概率。捕獲列表 引數 返回型別編譯器通常會計算lambda函式的返回型別,所以一般不需要指定返回型別,但少數情況編譯器可能無法判斷返回型別,還是需要指定返回型別。c 定義了許多...
Python中的id函式到底是什麼?
python官方文件給出的解釋是 id object cpython implementation detail this is the address of the object in memory.由此可以看出 1 id object 返回的是物件的 身份證號 唯一且不變,但在不重合的生命週期裡...