函數—參數會變嗎
阿新 • • 發佈:2018-02-20
就會 兩個 clas 輸出 改變 ret entity pri int
一 參數是字符串(以及數字和元組)
字符串(以及數字和元組)是不可變的,無法被修改即只能被新值覆蓋
1 def change(n): 2 n=‘gumby‘ 3 4 name=‘entity‘ 5 change(name) 6 print(name) 7 #輸出 entity
如果想要更改name 需要函數change(n)加上return n;將name重新賦值(name=change(name))
n聲明在函數內 所以函數結束後 n 就會消失
二 參數是可變的數據結構
例如 列表·
1 def try_to_change(n): 2 n[0]=‘mr.gumby‘ 3 4 name=[‘mrs.sisly‘,‘six‘] 5 try_to_change(name) 6 print(name) #[‘mr.gumby‘, ‘six‘]
在這裏,可變的數據結構作為參數明顯地發生了改變,為了不讓原先的列表name發生變化,我們需要一個name的副本;
而 當序列做切片的適合,返回的切片總是一個副本。
1 name=[‘mrs.sisly‘,‘six‘] 2 n=name[ : ]
現在n 和 name 是兩個獨立的列表,其值相等,並且改變其中一個不會影響到另外一個,
1 def try_to_change(n):
2 n[0]=‘mr.gumby‘
3 print(n)
4 name=[‘mrs.sisly‘,‘six‘]
5 try_to_change(name[:])
6 print(name)
結果:
1 # [‘mr.gumby‘, ‘six‘] n 2 # [‘mrs.sisly‘, ‘six‘] name
函數—參數會變嗎