python函數(shù)引用 Python函數(shù)引用傳遞

python 引用

python引用有哪些?來和我一起解讀一下吧~

創(chuàng)新互聯(lián)建站成都企業(yè)網(wǎng)站建設(shè)服務(wù),提供成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站網(wǎng)站開發(fā),網(wǎng)站定制,建網(wǎng)站,網(wǎng)站搭建,網(wǎng)站設(shè)計(jì),成都響應(yīng)式網(wǎng)站建設(shè)公司,網(wǎng)頁設(shè)計(jì)師打造企業(yè)風(fēng)格網(wǎng)站,提供周到的售前咨詢和貼心的售后服務(wù)。歡迎咨詢做網(wǎng)站需要多少錢:13518219792

python不允許程序員用傳值和傳引用,可以選擇選用“傳對(duì)象引用”的方式,這種方式等同于將傳值和傳引用綜合起來,如果函數(shù)收到的是一個(gè)可變對(duì)象的引用,就能修改對(duì)象的原始值,相當(dāng)于通過“傳引用”來傳遞對(duì)象,如果函數(shù)收到的是一個(gè)不可變對(duì)象的引用,就不能直接修改原始對(duì)象,相當(dāng)于通過“傳值’來傳遞對(duì)象。

python引用主要有:不可變數(shù)據(jù)引用和可變數(shù)據(jù)引用,其中不可變數(shù)據(jù)引用包括:字符串String、浮點(diǎn)型Float、元祖Tuple。

1、字符串String

#1.字符串引用 a='1234' b=a a='hello' print('a:',a)?#a:hello print('b:',b)??#b:1234 #查看內(nèi)存地址 print('a的內(nèi)存地址是:',id(a)) print('a的內(nèi)存地址是:',id(b)) 結(jié)果是: a:?hellob:?1234a的內(nèi)存地址是:?1651738050720a的內(nèi)存地址是:?1651737219456 分析:b的值指向a的值。python開辟了新的內(nèi)存空間給b,所以a和b的內(nèi)存地址不一樣。

2、浮點(diǎn)型Float

#2.浮點(diǎn)型引用 x=3.14 y=x x=9.88 print('x:',x) print('y:',y) print('x的內(nèi)存地址是:',id(x)) print('y的內(nèi)存地址是:',id(y)) 結(jié)果是: x:?9.88y:?3.14x的內(nèi)存地址是:?2578075558248y的內(nèi)存地址是:?2578075558008

3、元祖Tuple

元祖雖然是序列,且包含多個(gè)元素,但是不支持原處修改,如tuple[1]=1是非法的。#3.元祖引用 t1=(1,2,3,4,5) t2=t1 t1=('tuple','hello') print('t1:',t1) print('t2:',t2) print('t1的內(nèi)存地址是:',id(t1)) print('t2的內(nèi)存地址是:',id(t2)) 結(jié)果是: t修改后為:?(1,?2,?3,?['x',?'a',?'D',?'b']) 可變數(shù)據(jù)引用包括:列表引用、字典引用、函數(shù)的傳遞引用

1、列表引用

#4?列表的可變引用 list1=[1,2,3,4,5] list2=list1 list1[3]='list' print('list1=====%s'%list1) print('list2=====%s'%list2) print('list1的內(nèi)存地址是:',id(list1)) print('list2的內(nèi)存地址是:',id(list2)) 結(jié)果是: list1=====[1,?2,?3,?'list',?5]list2=====[1,?2,?3,?'list',?5]list1的內(nèi)存地址是:?2769992249864list2的內(nèi)存地址是:?2769992249864

2、函數(shù)的傳遞引用

def?eggs(someParameter): ????someParameter.append('hello?list') spam=[1,2,3,4] eggs(spam) print(spam) 結(jié)果是: [1,?2,?3,?4,?'hello?list']

3、字典引用 #5?字典的引用 a={'name':'Cathy','age':'27','job':'coder'} b=a a['age']='30' b['name']='Bob' print('a======%s'%a) print('b======%s'%b) print('a的內(nèi)存地址是:',?id(a)) print('b的內(nèi)存地址是:',?id(b)) 結(jié)果是: a======{'name':?'Bob',?'age':?'30',?'job':?'coder'} b======{'name':?'Bob',?'age':?'30',?'job':?'coder'} a的內(nèi)存地址是:?2510825602792 b的內(nèi)存地址是:?2510825602792

Python中 自己定義的函數(shù)內(nèi)生成的列表 怎么在外部中引用?

下面的例子演示了用3種方法來在外部引用函數(shù)內(nèi)部定義的列表:

#返回函數(shù)內(nèi)部定義的列表

def int_list1():

l=[1,2]

return l

#將函數(shù)內(nèi)部列表定義成全局的

def int_list2():

global l

l=[3,4]

#將函數(shù)內(nèi)部列表定義成函數(shù)的一個(gè)屬性

def int_list3():

l=[5,6]

int_list3.l=l

print(int_list1())

int_list2()

print(l)

int_list3()

print(int_list3.l)

這是截圖:

Python中后面引用前面的代碼怎么樣簡單

開頭用import函數(shù)

Python中后面引用前面的代碼,在開頭import函數(shù)。在程序里直接使用之前寫的函數(shù)代碼就可以了。

Python編程里我想用 from math import引用多個(gè)math函數(shù)該怎么操作?

如果知道每個(gè)函數(shù)的名字,可以from math import 函數(shù)1,函數(shù)2,...,函數(shù)n

如果導(dǎo)入全部函數(shù)就from math import *,但是一般不建議這么做,還是import math比較好。

python中變量的引用、可變和不可變類型、局部變量和全局變量

變量的引用

變量和數(shù)據(jù)都是保存在內(nèi)存中的

變量和數(shù)據(jù)是分開存儲(chǔ)的

數(shù)據(jù)保存在內(nèi)存中某個(gè)位置,通過地址來標(biāo)記

變量保存的是數(shù)據(jù)的地址,通過地址可以找到數(shù)據(jù)在內(nèi)存空間的位置

把變量保存數(shù)據(jù)地址的過程稱為引用

變量的重新賦值修改的是變量中引用數(shù)據(jù)的內(nèi)存地址

變量之間的賦值實(shí)際是引用的傳遞

函數(shù)參數(shù)的傳遞,本質(zhì)也是引用的傳遞

函數(shù)的返回值本身也是引用的傳遞

可變和不可變類型

不可變類型,內(nèi)存中的數(shù)據(jù)不允許被修改:數(shù)字類型(int,bool,float,complex,long(2,x)、字符串、元組(tuple)

可變類型,內(nèi)存中的數(shù)據(jù)可以被修改:列表list、字典dict

無論是可變還是不可變數(shù)據(jù)類型,通過賦值語句,都會(huì)改變變量的引用

Hash函數(shù)只能接收不可變數(shù)據(jù)類型,字典的鍵也只能是不可變數(shù)據(jù)類型,字典的value值可以是任意數(shù)據(jù)類型

局部變量

1.在函數(shù)內(nèi)部定義的變量就是局部變量(作用范圍只能是當(dāng)前函數(shù)內(nèi)部)

2.在函數(shù)外部無法直接訪問局部變量

3.不同的函數(shù)中可以定義同名的局部變量

4.局部變量的生命周期:從定義變量時(shí)開始,到函數(shù)運(yùn)行結(jié)束

全局變量

1.在所有函數(shù)外邊定義的變量就是全局變量

2.讓所有函數(shù)都能訪問到,可以作為函數(shù)通信的橋梁

3.一般情況下,為了和普通變量的區(qū)別,需要加上g_或gl_前綴

4.全局變量一般放在所有函數(shù)的最上面

5.在函數(shù)內(nèi)部修改全局變量,必須要加上global關(guān)鍵字,如果不加global只是定義了一個(gè)同名的局部變量

函數(shù)的多個(gè)返回值

python中值傳遞還是引用傳遞?

首先,Python中一切事物皆對(duì)象,變量是對(duì)對(duì)象在內(nèi)存中的存儲(chǔ)和地址的抽象。所有的變量都可以理解是內(nèi)存中一個(gè)對(duì)象的“引用”,或者,也可以看似c中void*的感覺。

python中統(tǒng)一都是引用傳遞,同時(shí)要注意類型是屬于對(duì)象的,而不是變量。而對(duì)象有兩種,“可更改”(mutable)與“不可更改”(immutable)對(duì)象。在python中,strings, tuples, 和numbers是不可更改的對(duì)象,而list,dict等則是可以修改的對(duì)象。

當(dāng)我們寫下面語句時(shí):

Python解釋器其實(shí)順序干了兩件事情:

從這里可以看出strings類型是不可變量,不可變實(shí)際上指的是不會(huì)更該字符串,比如把a(bǔ) = '123' 變?yōu)?a ='1234' 實(shí)際上是先創(chuàng)建了 “1234” 再用a去指向它。

但是,像list,dict等“可更改”的變量,他們會(huì)直接再本地更改,不會(huì)進(jìn)行副本拷貝。

簡言之,當(dāng)在 Python 中 a = sth 應(yīng)該理解為給 sth 貼上了一個(gè)標(biāo)簽 a。當(dāng)再賦值給 a 的時(shí)候,就好象把 a 這個(gè)標(biāo)簽從原來的 sth 上拿下來,貼到其他對(duì)象上,建立新的"引用"。

既然Python只允許引用傳遞,那有沒有辦法可以讓兩個(gè)變量不再指向同一內(nèi)存地址呢?

copy對(duì)于一個(gè)復(fù)雜對(duì)象的子對(duì)象并不會(huì)完全復(fù)制,什么是復(fù)雜對(duì)象的子對(duì)象呢?就比如序列里的嵌套序列,字典里的嵌套序列等都是復(fù)雜對(duì)象的子對(duì)象。對(duì)于子對(duì)象,python會(huì)把它當(dāng)作一個(gè)公共鏡像存儲(chǔ)起來,所有對(duì)他的復(fù)制都被當(dāng)成一個(gè)引用,所以說當(dāng)其中一個(gè)引用將鏡像改變了之后另一個(gè)引用使用鏡像的時(shí)候鏡像已經(jīng)被改變了。

deepcopy的時(shí)候會(huì)將復(fù)雜對(duì)象的每一層復(fù)制一個(gè)單獨(dú)的個(gè)體出來。 當(dāng)然其中主要的操作還是地址問題。

當(dāng)一個(gè)引用傳遞給函數(shù)的時(shí)候,函數(shù)自動(dòng)復(fù)制一份引用,這個(gè)函數(shù)里的引用和外邊的引用沒有半毛關(guān)系了.所以第一個(gè)例子里函數(shù)把引用指向了一個(gè)不可變對(duì)象,當(dāng)函數(shù)返回的時(shí)候,外面的引用沒半毛感覺.而第二個(gè)例子就不一樣了,函數(shù)內(nèi)的引用指向的是可變對(duì)象,對(duì)它的操作就和定位了指針地址一樣,在內(nèi)存里進(jìn)行修改.

引用計(jì)數(shù)

PyObject是每個(gè)對(duì)象必有的內(nèi)容,其中ob_refcnt就是做為引用計(jì)數(shù)。當(dāng)一個(gè)對(duì)象有新的引用時(shí),它的ob_refcnt就會(huì)增加,當(dāng)引用它的對(duì)象被刪除,它的ob_refcnt就會(huì)減少.引用計(jì)數(shù)為0時(shí),該對(duì)象生命就結(jié)束了。

優(yōu)點(diǎn):

缺點(diǎn):

網(wǎng)頁標(biāo)題:python函數(shù)引用 Python函數(shù)引用傳遞
分享鏈接:http://muchs.cn/article34/hgijse.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、搜索引擎優(yōu)化、商城網(wǎng)站、網(wǎng)站收錄、網(wǎng)站排名、網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(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í)需注明來源: 創(chuàng)新互聯(lián)

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