python函式引數改變問題

2022-08-28 23:39:32 字數 2496 閱讀 7714

前幾天在做專案的過程中發現了乙個問題,向函式中傳入乙個list,在函式體內將其賦值給list,對list1操作後發現list也發生了變化,啊 ! 出乎意料。查了一下原因,原來python裡有可變物件和不可變物件之分。只有傳入的是不可變物件時,值才不發生改變,若是可變物件,充當函式引數時要注意了。

不可變物件:number ,string , tuple,bool

可變物件: list , set , dictionary是可以改變內部的元素

下面總結一下:

先看例子:

def changestr (str):

str = "inside"

print "這是function中 , 值為:",str

mystr = "outside"

changestr(mystr)

print "這是函式外邊 , 值為:",mystr

輸出結果:

這是function中 , 值為: inside

這是函式外邊 , 值為: outside

即 傳入不可變物件字串,在函式內對其操作不影響呼叫結束後字串的值,即不發生改變。

ps: number和tuple結果是一樣的,這三種型別只能通過重新賦值來改變物件的值 .

def changestr (str):

print "這是function中 , 值為:",str

mystr = [1,2]

changestr(mystr)

print "這是函式外邊 , 值為:",mystr

結果:

這是function中 , 值為: [1, 2, 3]

這是函式外邊 , 值為: [1, 2, 3]

def change2(list):

list = [1,2,3,4]

mylist = ["aa",21]

print(mylist)

change2(mylist)

print(mylist)

輸出結果:

['aa', 21]

['aa', 21]

可變物件在函式體中的重新賦值 , 沒有對外部變數的值產生影響 , 不過仔細一想 , 卻又在情理之中 .

def change2(list):

list1 =list

mylist = ["aa",21]

print mylist

change2(mylist)

print mylist

輸出結果:

['aa', 21]

['aa', 21, 34]

要想不改變原list,用copy.deepcopy()

import copy

def change2(list):

list1=copy.deepcopy(list)

mylist = ["aa",21]

print mylist

change2(mylist)

print mylist

結果:

['aa', 21]

['aa', 21]

要想改變bool型,將其作為返回值

flag不做返回值,函式外不發生改變

flag=true

def change2(list,flag):

flag=false

mylist = ["aa",21]

print mylist

change2(mylist,flag)

print mylist,flag

結果:

['aa', 21]

['aa', 21, 34] true

flag作為返回值,返回值可用,但函式仍然不發生改變

flag=true

def change2(list,flag):

flag=false

return flag

mylist = ["aa",21]

print mylist

print change2(mylist,flag)

print mylist,flag

輸出結果:

['aa', 21]

false

['aa', 21, 34] true

Python改變引數值的函式

例1 銀行賬戶計算利率 賬戶餘額計算利息的函式 def addinterest balance,rate newbalance balance 1 rate balance newbalance def main amount 1000 rate 0.05 addinterest amount,ra...

python函式的引數問題

函式的定義方式 def 函式名 塊函式的呼叫方式 函式名 上面是最簡單的無引數函式。函式高階,就是帶有引數的函式,樣例如下 def demo x,y return x y 呼叫方式 print demo 1,2 輸出3demo函式做只做了兩個引數的加法運算。python的引數如下幾種 1.必須引數 ...

python引數函式 Python函式引數總結

coding utf 8 整理一下python函式的各種引數型別 位置引數 呼叫函式時,傳入的兩個值按照位置順序依次賦給引數 def power x,n s 1 while n 0 n n 1 s s x return s print power 5,2 預設引數 簡化函式的呼叫 def power...