欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

python函數作為傳參 python函數的傳參支持哪些

python怎么給函數傳參

函數參數傳遞機制問題在本質上是調用函數(過程)和被調用函數(過程)在調用發(fā)生時進行通信的方法問題。基本的參數傳遞機制有兩

為西湖等地區(qū)用戶提供了全套網頁設計制作服務,及西湖網站建設行業(yè)解決方案。主營業(yè)務為成都網站設計、成都網站制作、西湖網站設計,以傳統(tǒng)方式定制建設網站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

種:值傳遞和引用傳遞。

推薦:Python教程

值傳遞(passl-by-value)過程中,被調函數的形式參數作為被調函數的局部變量處理,即在堆棧中開辟了內存空間以存放由主調函數放

進來的實參的值,從而成為了實參的一個副本。值傳遞的特點是被調函數對形式參數的任何操作都是作為局部變量進行,不會影響主調函

數的實參變量的值。

引用傳遞(pass-by-reference)過程中,被調函數的形式參數雖然也作為局部變量在堆棧中開辟了內存空間,但是這時存放的是由主調函

數放進來的實參變量的地址。被調函數對形參的任何操作都被處理成間接尋址,即通過堆棧中存放的地址訪問主調函數中的實參變量。正

因為如此,被調函數對形參做的任何操作都影響了主調函數中的實參變量。

更多技術請關注Python視頻教程。

Python 的函數是怎么傳遞參數的

對象vs變量

在python中,類型屬于對象,變量是沒有類型的,這正是python的語言特性,也是吸引著很多pythoner的一點。所有的變量都可以理解是內存中一個對象的“引用”,或者,也可以看似c中void*的感覺。所以,希望大家在看到一個python變量的時候,把變量和真正的內存對象分開。

類型是屬于對象的,而不是變量。

這樣,很多問題就容易思考了。

例如:

對象vs變量

12

nfoo = 1 #一個指向int數據類型的nfoo(再次提醒,nfoo沒有類型)lstFoo = [1] #一個指向list類型的lstFoo,這個list中包含一個整數1

可更改(mutable)與不可更改(immutable)對象

對應于上一個概念,就必須引出另了另一概念,這就是可更改(mutable)對象與不可更改(immutable)對象。

對于python比較熟悉的人們都應該了解這個事實,在python中,strings, tuples, 和numbers是不可更改的對象,而list,dict等則是可以修改的對象。那么,這些所謂的可改變和不可改變影響著什么呢?

可更改vs不可更改

12345

nfoo = 1nfoo = 2lstFoo = [1]lstFoo[0] = 2

代碼第2行中,內存中原始的1對象因為不能改變,于是被“拋棄”,另nfoo指向一個新的int對象,其值為2

代碼第5行中,更改list中第一個元素的值,因為list是可改變的,所以,第一個元素變更為2。其實應該說,lstFoo指向一個包含一個對象的數組。賦值所發(fā)生的事情,是有一個新int對象被指定給lstFoo所指向的數組對象的第一個元素,但是對于lstFoo本身來說,所指向的數組對象并沒有變化,只是數組對象的內容發(fā)生變化了。這個看似void*的變量所指向的對象仍舊是剛剛的那個有一個int對象的list。

如下圖所示:

Python的函數參數傳遞:傳值?引用?

對于變量(與對象相對的概念),其實,python函數參數傳遞可以理解為就是變量傳值操作,用C++的方式理解,就是對void*賦值。如果這個變量的值不變,我們看似就是引用,如果這個變量的值改變,我們看著像是在賦值。有點暈是吧,我們仍舊據個例子。

不可變對象參數調用

12345

def ChangeInt( a ): a = 10nfoo = 2 ChangeInt(nfoo)print nfoo #結果是2

這時發(fā)生了什么,有一個int對象2,和指向它的變量nfoo,當傳遞給ChangeInt的時候,按照傳值的方式,復制了變量nfoo的值,這樣,a就是nfoo指向同一個Int對象了,函數中a=10的時候,發(fā)生什么?(還記得我上面講到的那些概念么),int是不能更改的對象,于是,做了一個新的int對象,另a指向它(但是此時,被變量nfoo指向的對象,沒有發(fā)生變化),于是在外面的感覺就是函數沒有改變nfoo的值,看起來像C++中的傳值方式。

可變對象參數調用

12345

def ChangeList( a ): a[0] = 10lstFoo = [2]ChangeList(lstFoo )print nfoo #結果是[10]

當傳遞給ChangeList的時候,變量仍舊按照“傳值”的方式,復制了變量lstFoo 的值,于是a和lstFoo 指向同一個對象,但是,list是可以改變的對象,對a[0]的操作,就是對lstFoo指向的對象的內容的操作,于是,這時的a[0] = 10,就是更改了lstFoo 指向的對象的第一個元素,所以,再次輸出lstFoo 時,顯示[10],內容被改變了,看起來,像C++中的按引用傳遞。

Python 的函數是怎么傳遞參數的?

首先你要明白,Python的函數傳遞方式是賦值,而賦值是通過建立變量與對象的關聯實現的。

對于你的代碼:

執(zhí)行 d = 2時,你在__main__里創(chuàng)建了d,并讓它指向2這個整型對象。

執(zhí)行函數add(d)過程中:

d被傳遞給add()函數后,在函數內部,num也指向了__main__中的2

但執(zhí)行num = num + 10之后,新建了對象12,并讓num指向了這個新對象——12。

如果你明白函數中的局部變量與__main__中變量的區(qū)別,那么很顯然,在__main__中,d仍在指著2這個對象,它沒有改變。因此,你打印d時得到了2。

如果你想讓輸出為12,最簡潔的辦法是:

在函數add()里增加return num

調用函數時使用d = add(d)

代碼如下:

def add(num):

num += 10

return num

d = 2

d = add(d)

print d

當前文章:python函數作為傳參 python函數的傳參支持哪些
網站鏈接:http://chinadenli.net/article16/hgccdg.html

成都網站建設公司_創(chuàng)新互聯,為您提供標簽優(yōu)化、建站公司網站策劃、定制開發(fā)、小程序開發(fā)電子商務

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯

商城網站建設