參數傳遞

  • 參數傳遞
在Python中, 類型屬於對象,變量是沒有類型的
a = [1,2,3]
a = "Runoob"
以上代碼這種,[1,2,3]是 List 類型,「Runoob」 是 String 類型,而變量 a 是沒有類型,它僅僅是一個對象的引用(一個指針),能夠是 List 類型對象,也能夠指向 String 類型對象

  • 可更改(mutable)與不可更改(immutable)對象
在 Python 中,string 、tuples,和 numbers 是不可更改的對象,而 list,dict 則是能夠修改的對象

  • 不可變類型
變量賦值 a = 5,後賦值 a = 10,實際是新生成一個 int 值對象10,再讓 a 指向 它,而5被丟棄,不是改變 a 的值,至關於新生成了 a

  • 可變類型
變量賦值 la = [1,2,3,4]後再賦值 la[2] = 5,則是將 list la 的第三個元素值更改,自己 la 沒有動,只是其內部的一部分值被修改

  • Python 函數的參數傳遞

  • 不可變類型
相似 c++ 的值傳遞,如整數、字符串、元祖。如 fun(a) ,傳遞的只是 a 的值,沒有影響 a 對象自己,好比在 fun(a) 內部修改 a 的值,只是修改另外一個複製的對象,不會影響 a 自己
#Pyton 傳不可變對象實例
def ChangeInt(a):
    print a      #按傳值的方式賦值變量 b,a和b都指向了用一個int對象 2
    a =10        # a 又指向了 int 對象 10
b = 2
ChangeInt(b)
print b          

# 輸出
2
2
實例中有 int 對象 2,指向了 變量 b ,在傳遞給 ChangeInt 函數時,按傳值的方式賦值了變量 b( 即賦值了引用),因此a 和 b都指向了同一個 Int 對象 2 ,在 a =10 時,則新生成一個 int值對象 10,並讓 a 指向它

  • 可變類型
相似 c++ 的引用傳遞,如列表、字典。如 fun(la) ,則將 la 真正的傳過去,修改後 fun 外部的 la 也會受影響
def changeMe(mylist):
    "傳入修改的列表"
    mylist.append([1,2,3,4])
    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]]
傳入函數的和爲末尾添加新內容給的對象用的是用同一個引用
相關文章
相關標籤/搜索