国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

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

2020-02-16 01:37:04
字體:
來源:轉載
供稿:網(wǎng)友

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

python中id可以獲取對象的內存地址

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

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

對于list對象可以看到下面的結果:

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

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

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

通過引用將參數(shù)復制到局部作用域的對象中,意味著被用來訪問函數(shù)參數(shù)的變量于提高給函數(shù)的對象無關,因為存在一個復制問題,這和C語言是相同的。而且修改局部對象不會改變原始數(shù)據(jù)。

可以在適當位置修改可變對象。可變對象主要就是列表和字典,這個適當位置實質上就是前面分析的局部子對象的修改不會改變字典對象或者列表對象的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 = 10pId(num1)incrInt(num1)print(num1)list1 = [0,2]pId(list1)incrList(list1)print(list1)

結果如下:

python test.py4299181904104336979912[0, 2, 1]

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

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

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

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 即墨市| 闽清县| 青海省| 泗水县| 竹溪县| 竹溪县| 麟游县| 永州市| 景德镇市| 朝阳市| 惠东县| 青海省| 诏安县| 灌云县| 五华县| 依安县| 萨嘎县| 虞城县| 元氏县| 毕节市| 铅山县| 社会| 南陵县| 堆龙德庆县| 弋阳县| 衡南县| 平湖市| 浮梁县| 夏邑县| 十堰市| 乐业县| 会宁县| 武威市| 安西县| 华池县| 江孜县| 永川市| 房山区| 观塘区| 洛宁县| 谢通门县|