最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

老生常談python函數(shù)參數(shù)的區(qū)別(必看篇)

 更新時間:2017年05月29日 09:02:34   投稿:jingxian  
下面小編就為大家?guī)硪黄仙U刾ython函數(shù)參數(shù)的區(qū)別(必看篇)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

在運(yùn)用python的過程中,發(fā)現(xiàn)當(dāng)函數(shù)參數(shù)為list的時候,在函數(shù)內(nèi)部調(diào)用list.append()會改變形參,與C/C++的不太一樣,查閱相關(guān)資料,在這里記錄一下。

python中id可以獲取對象的內(nèi)存地址

>>> num1 = 10
>>> num2 = num1
>>> num3 = 10
>>> id(num1)
>>> id(num2)
>>> id(num3)

可以看到num1、num2、num3三個對象指向的是一個地址,python在這里采用的是一種叫做引用計數(shù)的方式來完成的,很類似C++zhong的智能指針,變量賦值給變量相當(dāng)于同一對象引用計數(shù)器+1,而不是重新分配空間。

對于list對象可以看到下面的結(jié)果:

>>> list1 = [0,1]
>>> list2 = [0,1]
>>> id(list1)
>>> id(list2)
>>> list3 = list1
>>>id(list3)

list1與list3指向同一空間,list2指向另外的一處地址。

python中的函數(shù)傳參是對象傳遞,同時也存在局部與全局的問題,在傳參過程中存在兩個規(guī)則:

通過引用將參數(shù)復(fù)制到局部作用域的對象中,意味著被用來訪問函數(shù)參數(shù)的變量于提高給函數(shù)的對象無關(guān),因?yàn)榇嬖谝粋€復(fù)制問題,這和C語言是相同的。而且修改局部對象不會改變原始數(shù)據(jù)。

可以在適當(dāng)位置修改可變對象??勺儗ο笾饕褪橇斜砗妥值?,這個適當(dāng)位置實(shí)質(zhì)上就是前面分析的局部子對象的修改不會改變字典對象或者列表對象的ID

def incrInt(num):
  pId(num)
  num += 1;
  pId(num)

def incrList(listArg):
  pId(listArg)
  listArg.append(1);
  pId(listArg)
def pId(arg):
  print id(arg)
num1 = 10
pId(num1)
incrInt(num1)
print(num1)

list1 = [0,2]
pId(list1)
incrList(list1)
print(list1)

結(jié)果如下:

python test.py
4299181904
10
4336979912
[0, 2, 1]

可以看到在函數(shù)內(nèi)部,改變int的數(shù)值,則num指向了另一塊內(nèi)存地址,而修改list,則是在同一塊內(nèi)存地址。

在python中,對象可分為可變(mutable)和不可變(immutable)兩種類型,元組(tuple)、數(shù)值型(number)、字符串(string)均為不可變對象,而字典型(dictionary)和列表(list)的對象是可變對象。

所以在傳參過程中要注意下。

以上這篇老生常談python函數(shù)參數(shù)的區(qū)別(必看篇)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論

鹰潭市| 祁阳县| 霍城县| 始兴县| 上虞市| 柯坪县| 平陆县| 闻喜县| 绥棱县| 扬中市| 灯塔市| 通化县| 安宁市| 来安县| 库车县| 长武县| 方正县| 蒙城县| 扶风县| 孟村| 萨嘎县| 铜川市| 梓潼县| 松江区| 昌吉市| 包头市| 申扎县| 兴和县| 宁城县| 金华市| 凭祥市| 平泉县| 长汀县| 靖州| 巫山县| 尚志市| 遵义县| 大同县| 漳浦县| 开阳县| 天柱县|