亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

函數(shù)傳值問題

先看一個(gè)例子:

# -*- coding: UTF-8 -*-
def chagne_number( b ):
    b = 1000
b = 1
chagne_number(b)
print( b )

最後輸出的結(jié)果為:

1

這裡可能有些人會(huì)有疑問,為啥不是透過函數(shù)chagne_number更改了 b 的值嗎?為啥沒有變化,輸出的結(jié)果還是 1 ,這個(gè)問題很多程式語言都會(huì)講到,原理解釋也是差不多的。

這裡主要是函數(shù)參數(shù)的傳遞中,傳遞的是型別對(duì)象,之前也介紹了 Python 中基本的資料型別等。而這些類型對(duì)象可以分為可更改類型和不可更改的類型

在Python 中,字符串,整形,浮點(diǎn)型,tuple 是不可更改的對(duì)象,而list , dict 等是可以更改的對(duì)象。

例如:

不可更改的型別:變數(shù)賦值a = 1,其實(shí)就是產(chǎn)生一個(gè)整形物件1 ,然後變數(shù)a 指向1,當(dāng)a = 1000 其實(shí)就是再產(chǎn)生一個(gè)整形物件1000,然後改變a 的指向,不再指向整形物件1 ,而是指向1000,最後1 會(huì)被丟棄

可更改的類型:變數(shù)賦值a = [1,2,3,4,5,6] ,就是產(chǎn)生一個(gè)物件list ,list 裡面有6 個(gè)元素,而變數(shù)a 指向list ,a[2] = 5則是將list a 的第三個(gè)元素值更改,這裡跟上面是不同的,並不是將a 重新指向,而是直接修改list 中的元素值。

ca71dacdee25f4d37deb9d0275fb3ba.png

這也將影響函數(shù)中參數(shù)的傳遞了:

不可更改的類型:類似c 的值傳遞,如整數(shù)、字串、元組。如fun(a),傳遞的只是 a 的值,沒有影響 a 物件本身。例如在 fun(a)內(nèi)部修改 a 的值,只是修改另一個(gè)複製的對(duì)象,不會(huì)影響 a 本身。

可更改的類型:類似 c 的引用傳遞,如 列表,字典。如fun(a),則是將a 真正的傳過去,修改後fun 外部的a 也會(huì)受影響

因此,在一開始的例子中,b = 1,創(chuàng)建了一個(gè)整形對(duì)象1 ,變數(shù)b 指向了這個(gè)對(duì)象,然後透過函數(shù)chagne_number 時(shí),以傳值的方式複製了變數(shù)b ,傳遞的只是b 的值,並沒有影響到b 的本身。具體可以看??下修改後的實(shí)例,透過列印的結(jié)果更好的理解。

# -*- coding: UTF-8 -*-
def chagne_number( b ):
    print('函數(shù)中一開始 b 的值:{}' .format( b ) )
    b = 1000
    print('函數(shù)中 b 賦值后的值:{}' .format( b ) )
b = 1
chagne_number( b )
print( '最后輸出 b 的值:{}' .format( b )  )

列印的結(jié)果:

函數(shù)中一開始 b 的值:1
函數(shù)中 b 賦值后的值:1000
最后輸出 b 的值:1

當(dāng)然,如果參數(shù)中的是可更改的類型,那麼調(diào)用了這個(gè)函數(shù)後,原來的值也會(huì)被更改,具體實(shí)例如下:

# -*- coding: UTF-8 -*-
def chagne_list( b ):
    print('函數(shù)中一開始 b 的值:{}' .format( b ) )
    b.append(1000)
    print('函數(shù)中 b 賦值后的值:{}' .format( b ) )
b = [1,2,3,4,5]
chagne_list( b )
print( '最后輸出 b 的值:{}' .format( b )  )

輸出的結(jié)果:

函數(shù)中一開始 b 的值:[1, 2, 3, 4, 5]
函數(shù)中 b 賦值后的值:[1, 2, 3, 4, 5, 1000]
最后輸出 b 的值:[1, 2, 3, 4, 5, 1000]
繼續(xù)學(xué)習(xí)
||
提交重置程式碼