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

python函數(shù)傳函數(shù) python函數(shù)傳值

Python 的函數(shù)是怎么傳遞參數(shù)的

對(duì)象vs變量

創(chuàng)新互聯(lián)建站專業(yè)為企業(yè)提供港閘網(wǎng)站建設(shè)、港閘做網(wǎng)站、港閘網(wǎng)站設(shè)計(jì)、港閘網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、港閘企業(yè)網(wǎng)站模板建站服務(wù),10年港閘做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

在python中,類型屬于對(duì)象,變量是沒(méi)有類型的,這正是python的語(yǔ)言特性,也是吸引著很多pythoner的一點(diǎn)。所有的變量都可以理解是內(nèi)存中一個(gè)對(duì)象的“引用”,或者,也可以看似c中void*的感覺(jué)。所以,希望大家在看到一個(gè)python變量的時(shí)候,把變量和真正的內(nèi)存對(duì)象分開(kāi)。

類型是屬于對(duì)象的,而不是變量。

這樣,很多問(wèn)題就容易思考了。

例如:

對(duì)象vs變量

12

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

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

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

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

可更改vs不可更改

12345

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

代碼第2行中,內(nèi)存中原始的1對(duì)象因?yàn)椴荒芨淖儯谑潜弧皰仐墶保韓foo指向一個(gè)新的int對(duì)象,其值為2

代碼第5行中,更改list中第一個(gè)元素的值,因?yàn)閘ist是可改變的,所以,第一個(gè)元素變更為2。其實(shí)應(yīng)該說(shuō),lstFoo指向一個(gè)包含一個(gè)對(duì)象的數(shù)組。賦值所發(fā)生的事情,是有一個(gè)新int對(duì)象被指定給lstFoo所指向的數(shù)組對(duì)象的第一個(gè)元素,但是對(duì)于lstFoo本身來(lái)說(shuō),所指向的數(shù)組對(duì)象并沒(méi)有變化,只是數(shù)組對(duì)象的內(nèi)容發(fā)生變化了。這個(gè)看似void*的變量所指向的對(duì)象仍舊是剛剛的那個(gè)有一個(gè)int對(duì)象的list。

如下圖所示:

Python的函數(shù)參數(shù)傳遞:傳值?引用?

對(duì)于變量(與對(duì)象相對(duì)的概念),其實(shí),python函數(shù)參數(shù)傳遞可以理解為就是變量傳值操作,用C++的方式理解,就是對(duì)void*賦值。如果這個(gè)變量的值不變,我們看似就是引用,如果這個(gè)變量的值改變,我們看著像是在賦值。有點(diǎn)暈是吧,我們?nèi)耘f據(jù)個(gè)例子。

不可變對(duì)象參數(shù)調(diào)用

12345

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

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

可變對(duì)象參數(shù)調(diào)用

12345

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

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

python如何將可選參數(shù)或關(guān)鍵字參數(shù)從一個(gè)函數(shù)傳遞到另一個(gè)函數(shù)?

使用函數(shù)參數(shù)列表中的*和**說(shuō)明符收集參數(shù);這會(huì)將位置參數(shù)作為元組,將關(guān)鍵字參數(shù)作為字典。然后,您可以使用*和**調(diào)用另一個(gè)函數(shù)時(shí)傳遞這些參數(shù):

def f(x, *args, **kwargs):

...

kwargs['width'] = '14.3c'

...

g(x, *args, **kwargs)

python怎么將自函數(shù)的變量傳給主函數(shù)

python將自函數(shù)的變量傳給主函數(shù):通過(guò)變量傳遞就可以。

def func():global x,print 'x is', x,x=2,print 'Changed local x to', xx = 50func()print 'Value of x is', x。執(zhí)行結(jié)果是這樣的:x is 50Changed global x to 2Value of x is 2。

可移植性:

由于它的開(kāi)源本質(zhì),Python已經(jīng)被移植在許多平臺(tái)上(經(jīng)過(guò)改動(dòng)使它能夠工作在不同平臺(tái)上)。這些平臺(tái)包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2。

Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE、PocketPC、Symbian以及Google基于linux開(kāi)發(fā)的android平臺(tái)。

一個(gè)用編譯性語(yǔ)言比如C或C++寫(xiě)的程序可以從源文件(即C或C++語(yǔ)言)轉(zhuǎn)換到一個(gè)你的計(jì)算機(jī)使用的語(yǔ)言(二進(jìn)制代碼,即0和1)。這個(gè)過(guò)程通過(guò)編譯器和不同的標(biāo)記、選項(xiàng)完成。

python 類中的變量傳遞給類中的函數(shù)

為了把類中的變量傳遞給類中的函數(shù),我們需要用到3個(gè)特定格式

① 第一個(gè)格式 @classmethod 的中文意思就是“類方法”,@classmethod聲明了函數(shù)1是類方法,這樣才能允許函數(shù)1使用類屬性中的數(shù)據(jù)。

② 第二個(gè)格式 cls 的意思是class的縮寫(xiě)。如果類方法函數(shù)1想使用類屬性(也就是類中的變量),就要寫(xiě)上cls為函數(shù)1的第一個(gè)參數(shù),也就是把這個(gè)類作為參數(shù)傳給自己,這樣就能被允許使用類中的數(shù)據(jù)。

③ 第三個(gè)格式是 cls.變量 。類方法想使用類屬性的時(shí)候,需要在這些變量名稱前加上cls. 這就好比類方法和類之間的約法三章,所以但凡有任何格式錯(cuò)誤都會(huì)報(bào)錯(cuò)。

如果缺①,即缺了“@classmethod”,類方法就不能直接利用類中的屬性,于是報(bào)錯(cuò)

Python 的函數(shù)是怎么傳遞參數(shù)的?

首先你要明白,Python的函數(shù)傳遞方式是賦值,而賦值是通過(guò)建立變量與對(duì)象的關(guān)聯(lián)實(shí)現(xiàn)的。

對(duì)于你的代碼:

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

執(zhí)行函數(shù)add(d)過(guò)程中:

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

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

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

如果你想讓輸出為12,最簡(jiǎn)潔的辦法是:

在函數(shù)add()里增加return num

調(diào)用函數(shù)時(shí)使用d = add(d)

代碼如下:

def add(num):

num += 10

return num

d = 2

d = add(d)

print d

python如何導(dǎo)入函數(shù)

python的內(nèi)建函數(shù)即是python自帶的函數(shù),這種函數(shù)不需要定義,并且不同的內(nèi)建函數(shù)具有不同的功能,可以直接使用。

以下是部分內(nèi)建函數(shù)用法及說(shuō)明

1、abs(),返回?cái)?shù)字的絕對(duì)值。

2、all(),如果集合中所有元素是true或集合為空集合,返回True。

3、any(),如果集合中有一項(xiàng)元素是true,返回True;空集合為False

4、ascii(), 返回一個(gè)表示對(duì)象的字符串。

5、bin(),將整數(shù)轉(zhuǎn)換為前綴為“0b”的二進(jìn)制字符串。

6、bool(),返回一個(gè)布爾值,即True或者之一False。

7、bytearray(),返回一個(gè)新的字節(jié)數(shù)組。

8、callable(對(duì)象)判斷對(duì)象參數(shù)是否可被調(diào)用(可被調(diào)用指的是對(duì)象能否使用()括號(hào)的方法調(diào)用)

9、chr(),返回表示Unicode代碼點(diǎn)為整數(shù)i的字符的字符串。與ord()函數(shù)相反。

推薦學(xué)習(xí)《python教程》

10、classmethod,將方法轉(zhuǎn)換為類方法。

11、compile,將源代碼編譯為代碼或AST對(duì)象。代碼對(duì)象可以由exec()或執(zhí)行eval()。 source可以是普通字符串,字節(jié)字符串或AST對(duì)象。

12、dic(),創(chuàng)建一個(gè)字典

13、divmod(a,b),將兩個(gè)數(shù)作為參數(shù),并在使用整數(shù)除法時(shí)返回由商和余數(shù)組成的一對(duì)數(shù)

14、enumerate(iterable,start = 0)

enumerate是枚舉、列舉的意思

對(duì)于一個(gè)可迭代的(iterable)/可遍歷的對(duì)象(如列表、字符串),enumerate將其組成一個(gè)索引序列,利用它可以同時(shí)獲得索引和值

enumerate多用于在for循環(huán)中得到計(jì)數(shù)

15、eval,將一個(gè)字符串變?yōu)樽值?/p>

16、exec(object [, globals[, locals]])exec語(yǔ)句用來(lái)執(zhí)行儲(chǔ)存在字符串或文件中的Python語(yǔ)句

17、filter(功能,可迭代)

filter函數(shù)用于過(guò)濾序列

filter()把傳入的函數(shù)依次作用于每個(gè)元素,然后根據(jù)返回值是True還是False決定保留還是丟棄該元素。

文章名稱:python函數(shù)傳函數(shù) python函數(shù)傳值
本文來(lái)源:http://chinadenli.net/article32/hppdpc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開(kāi)發(fā)服務(wù)器托管品牌網(wǎng)站制作虛擬主機(jī)搜索引擎優(yōu)化網(wǎng)站策劃

廣告

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

h5響應(yīng)式網(wǎng)站建設(shè)