亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python參數(shù)的傳遞幾種情況實(shí)例詳解

 更新時(shí)間:2023年09月04日 10:49:21   作者:菜鳥(niǎo)之編程  
這篇文章主要給大家介紹了關(guān)于Python參數(shù)的傳遞的相關(guān)資料,在Python中傳遞參數(shù)指的是函數(shù)或方法中的參數(shù)傳輸方式,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下

一、參數(shù)的傳遞 

函數(shù)的參數(shù)傳遞本質(zhì)上就是:從實(shí)參到形參的賦值操作。Python中“一切皆對(duì)象”,所有的賦值操作都是“引用的賦值”。所以,Python中參數(shù)的傳遞都是“引用傳遞”,不是“值傳遞”。

具體操作時(shí)分為兩類:

對(duì)“可變對(duì)象”進(jìn)行“寫操作”,直接作用于原對(duì)象本身。對(duì)“不可變對(duì)象”進(jìn)行“寫操作”,會(huì)產(chǎn)生一個(gè)新的“對(duì)象空間”,并用新的值填充這塊空間。

可變對(duì)象有:

字典、列表、集合、自定義的對(duì)象等

不可變對(duì)象有:

數(shù)字、字符串、元組、function等

二、傳遞可變對(duì)象的引用

傳遞參數(shù)是可變對(duì)象(例如:列表、字典、自定義的其他可變對(duì)象等),實(shí)際傳遞的還是對(duì)象的引用。在函數(shù)體中不創(chuàng)建新的對(duì)象拷貝,而是可以直接修改所傳遞的對(duì)象。

【操作】參數(shù)傳遞:傳遞可變對(duì)象的引用

b = [10,20]
def f2(m):
  print("m:",id(m))    #b和m是同一個(gè)對(duì)象
  m.append(30)  #由于m是可變對(duì)象,不創(chuàng)建對(duì)象拷貝,直接修改這個(gè)對(duì)象
?
f2(b)
print("b:",id(b))
print(b)

執(zhí)行結(jié)果:

m: 45765960

b: 45765960

[10, 20, 30]

三、傳遞不可變對(duì)象的引用

傳遞參數(shù)是不可變對(duì)象(例如: int 、 float 、字符串、元組、布爾值),實(shí)際傳遞的還是對(duì)象的引用。在”賦值操作”時(shí),由于不可變對(duì)象無(wú)法修改,系統(tǒng)會(huì)新創(chuàng)建一個(gè)對(duì)象。

【操作】參數(shù)傳遞:傳遞不可變對(duì)象的引用

a = 100
def f1(n):
  print("n:",id(n))    #傳遞進(jìn)來(lái)的是a對(duì)象的地址
  n = n+200      #由于a是不可變對(duì)象,因此創(chuàng)建新的對(duì)象n
  print("n:",id(n))  #n已經(jīng)變成了新的對(duì)象
  print(n)
f1(a)
print("a:",id(a))

執(zhí)行結(jié)果:

n: 1663816464

n: 46608592

300

a: 1663816464

顯然,通過(guò) id 值我們可以看到 n a 一開(kāi)始是同一個(gè)對(duì)象。給n賦值后,n是新的對(duì)象。

四、淺拷貝和深拷貝

為了更深入的了解參數(shù)傳遞的底層原理,我們需要講解一下“淺拷貝和深拷貝”。我們可以使用內(nèi)置函數(shù): copy (淺拷貝)、 deepcopy (深拷貝)。

  • 淺拷貝:拷貝對(duì)象,但不拷貝子對(duì)象的內(nèi)容,只是拷貝子對(duì)象的引用。
  • 深拷貝:拷貝對(duì)象,并且會(huì)連子對(duì)象的內(nèi)存也全部(遞歸)拷貝一份,對(duì)子對(duì)象的修改不會(huì)影響源對(duì)象
#測(cè)試淺拷貝和深拷貝
import copy
?
def testCopy():
  '''測(cè)試淺拷貝'''
  a = [10, 20, [5, 6]]
  b = copy.copy(a)
?
  print("a", a)
  print("b", b)
  b.append(30)
  b[2].append(7)
  print("淺拷貝......")
  print("a", a)
  print("b", b)
?
def testDeepCopy():
  '''測(cè)試深拷貝'''
  a = [10, 20, [5, 6]]
  b = copy.deepcopy(a)
?
  print("a", a)
  print("b", b)
  b.append(30)
  b[2].append(7)
  print("深拷貝......")
  print("a", a)
  print("b", b)
?
testCopy()
print("*************")
testDeepCopy()

運(yùn)行結(jié)果:

a [10, 20, [5, 6]]

b [10, 20, [5, 6]]

淺拷貝......

a [10, 20, [5, 6, 7]]

b [10, 20, [5, 6, 7], 30]

a [10, 20, [5, 6]]

b [10, 20, [5, 6]]

深拷貝......

a [10, 20, [5, 6]]

b [10, 20, [5, 6, 7], 30]

五、傳遞不可變對(duì)象包含的子對(duì)象是可變的情況

#傳遞不可變對(duì)象時(shí)。不可變對(duì)象里面包含的子對(duì)象是可變的。則方法內(nèi)修改了這個(gè)可變對(duì)象,源對(duì)象也發(fā)生了變化。
?
a = (10,20,[5,6])
print("a:",id(a))
?
def test01(m):
  print("m:",id(m))
  m[2][0] = 888
  print(m)
  print("m:",id(m))
?
test01(a)
print(a)

運(yùn)行結(jié)果:

a: 41611632

m: 41611632

(10, 20, [888, 6])

m: 41611632

(10, 20, [888, 6])

總結(jié) 

到此這篇關(guān)于Python參數(shù)的傳遞幾種情況的文章就介紹到這了,更多相關(guān)Python參數(shù)傳遞內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python數(shù)據(jù)類型_元組、字典常用操作方法(介紹)

    python數(shù)據(jù)類型_元組、字典常用操作方法(介紹)

    下面小編就為大家?guī)?lái)一篇python數(shù)據(jù)類型_元組、字典常用操作方法(介紹)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • python中的函數(shù)遞歸和迭代原理解析

    python中的函數(shù)遞歸和迭代原理解析

    這篇文章主要介紹了python中的函數(shù)遞歸和迭代原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • Python使用matplotlib的pie函數(shù)繪制餅狀圖功能示例

    Python使用matplotlib的pie函數(shù)繪制餅狀圖功能示例

    這篇文章主要介紹了Python使用matplotlib的pie函數(shù)繪制餅狀圖功能,結(jié)合實(shí)例形式分析了Python使用matplotlib的pie函數(shù)進(jìn)行餅狀圖繪制的具體操作技巧,注釋中對(duì)pie函數(shù)的用法進(jìn)行了詳細(xì)的說(shuō)明,便于理解,需要的朋友可以參考下
    2018-01-01
  • wxPython實(shí)現(xiàn)繪圖小例子

    wxPython實(shí)現(xiàn)繪圖小例子

    這篇文章主要為大家詳細(xì)介紹了wxPython實(shí)現(xiàn)繪圖小例子,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • Web自動(dòng)化之Selenium常用操作方法大全

    Web自動(dòng)化之Selenium常用操作方法大全

    Selenium是一種自動(dòng)化測(cè)試工具,可以用于測(cè)試Web應(yīng)用程序,它提供了一組用于自動(dòng)化Web瀏覽器進(jìn)行測(cè)試的API,下面這篇文章主要給大家介紹了關(guān)于Web自動(dòng)化之Selenium常用操作方法的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • 用python實(shí)現(xiàn)九九乘法表實(shí)例

    用python實(shí)現(xiàn)九九乘法表實(shí)例

    大家好,本篇文章主要講的是用python實(shí)現(xiàn)九九乘法表實(shí)例,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • python如何實(shí)現(xiàn)二叉搜索樹(shù)算法

    python如何實(shí)現(xiàn)二叉搜索樹(shù)算法

    二叉搜索樹(shù)(BST)是一種數(shù)據(jù)結(jié)構(gòu),用于動(dòng)態(tài)集合操作如搜索、插入、刪除等,每個(gè)節(jié)點(diǎn)的左子樹(shù)包含小于節(jié)點(diǎn)值的所有項(xiàng),右子樹(shù)包含大于節(jié)點(diǎn)值的所有項(xiàng),通過(guò)中序遍歷可得升序序列,插入、搜索和刪除都從根節(jié)點(diǎn)開(kāi)始,根據(jù)值的大小移動(dòng)到左或右子樹(shù)
    2024-10-10
  • Python使用Apache Kafka時(shí)Poll拉取速度慢的解決方法

    Python使用Apache Kafka時(shí)Poll拉取速度慢的解決方法

    在使用Apache Kafka時(shí),poll方法拉取消息速度慢常見(jiàn)于網(wǎng)絡(luò)延遲、消息大小過(guò)大、消費(fèi)者配置不當(dāng)或高負(fù)載情況,本文提供了優(yōu)化消費(fèi)者配置、并行消費(fèi)、優(yōu)化消息處理邏輯和監(jiān)控調(diào)試的解決方案,并附有Python代碼示例和相關(guān)類圖、序列圖以幫助理解和實(shí)現(xiàn)
    2024-09-09
  • Diango + uwsgi + nginx項(xiàng)目部署的全過(guò)程(可外網(wǎng)訪問(wèn))

    Diango + uwsgi + nginx項(xiàng)目部署的全過(guò)程(可外網(wǎng)訪問(wèn))

    這篇文章主要給大家介紹了關(guān)于Diango + uwsgi + nginx項(xiàng)目部署的全過(guò)程(可外網(wǎng)訪問(wèn)),文中通過(guò)示例代碼將部署的過(guò)程介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • 用Python將結(jié)果保存為xlsx的方法

    用Python將結(jié)果保存為xlsx的方法

    今天小編就為大家分享一篇用Python將結(jié)果保存為xlsx的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01

最新評(píng)論