python函數(shù)間變量 python調(diào)用函數(shù)內(nèi)變量

python 函數(shù)外面的變量能在里面使用嗎?

這涉及到變量的生命周期問(wèn)題,一般的,在函數(shù)里面聲明的變量在函數(shù)外是不起作用的。

創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的大祥網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

一個(gè)比較簡(jiǎn)單的解決辦法是你在函數(shù)外就先聲明這個(gè)變量,聲明成全局變量。然后在函數(shù)里面進(jìn)行操作和賦值。

最后就能在函數(shù)外獲取變量的值了。例如:

123456 x = 0def a(): x = 2if __name__ == '__main__': a() print x

最終x打印出來(lái)的結(jié)果就是2

python中函數(shù)中定義的變量只能在該函數(shù)題中起作用對(duì)嗎

函數(shù)中定義的變量只能在函數(shù)體重起作用,Python在函數(shù)中定義的變量只能在該函數(shù)體中才可以起作用,只要出了這個(gè)函數(shù),那么其他的地方就無(wú)法訪問(wèn)這個(gè)變量,因?yàn)樵撟兞康淖饔糜蛑辉谶@個(gè)函數(shù)中,所以只在本函數(shù)體內(nèi)有效。

因?yàn)槎x了局部變量只能在其被聲明的函數(shù)內(nèi)部訪問(wèn),要想在程序的全域進(jìn)行訪問(wèn)只能通過(guò)定義全局變量的方法進(jìn)行實(shí)現(xiàn),這些只要在程序控制范圍內(nèi)都可以調(diào)用。

一般情況下變量就分為這兩大類(lèi),一類(lèi)是全局變量,一類(lèi)是局部變量。

Python常用的控制語(yǔ)句:

1、if語(yǔ)句,當(dāng)條件成立時(shí)運(yùn)行語(yǔ)句塊。經(jīng)常與else,elif(相當(dāng)于else if)配合使用、for語(yǔ)句,遍歷列表、字符串、字典、集合等迭代器,依次處理迭代器中的每個(gè)元素。

2、while語(yǔ)句,當(dāng)條件為真時(shí),循環(huán)運(yùn)行語(yǔ)句塊、try語(yǔ)句,與except,finally配合使用處理在程序運(yùn)行中出現(xiàn)的異常情況、class語(yǔ)句,用于定義類(lèi)型。

3、def語(yǔ)句,用于定義函數(shù)和類(lèi)型的方法、pass語(yǔ)句,表示此行為空,不運(yùn)行任何操作。

4、from…?import語(yǔ)句,從包導(dǎo)入模塊或從模塊導(dǎo)入某個(gè)對(duì)象、import … as語(yǔ)句,將導(dǎo)入的對(duì)象賦值給一個(gè)變量、in語(yǔ)句,判斷一個(gè)對(duì)象是否在一個(gè)字符串、列表、元組里。

Python代碼編寫(xiě)注意:

開(kāi)發(fā)者有意讓違反了縮進(jìn)規(guī)則的程序不能通過(guò)編譯,所以在進(jìn)行Python代碼的書(shū)寫(xiě)時(shí)一定要注意代碼的縮進(jìn)。

以上內(nèi)容參考:百度百科-Python

python函數(shù)中局部變量與全局變量遵守規(guī)則

(1)簡(jiǎn)單數(shù)據(jù)類(lèi)型變量無(wú)論是否與全局變量重名,僅在函數(shù)內(nèi)部創(chuàng)建和使用,函數(shù)退出后變量被釋放,如有全局同名變量,其值不變。

(2)簡(jiǎn)單數(shù)據(jù)類(lèi)型變量在用global保留字聲明后,作為全局變量使用,函數(shù)退出后該變量保留且值被函數(shù)改變。

(3)對(duì)于組合數(shù)據(jù)類(lèi)型的全局變量,如果在函數(shù)內(nèi)部沒(méi)有被真實(shí)創(chuàng)建的同名變量,則函數(shù)內(nèi)部可以直接使用并修改全局變量的值。

(4)如果函數(shù)內(nèi)部真實(shí)創(chuàng)建了組合數(shù)據(jù)類(lèi)型變量,無(wú)論是否有同名全局變量,函數(shù)僅對(duì)局部變量進(jìn)行操作,函數(shù)退出后局部變量被釋放,全局變量值不變。

*《python語(yǔ)言程序設(shè)計(jì)基礎(chǔ)》.高等教育出版社

解析Python函數(shù)變量如何使用

剛學(xué)用Python的時(shí)候,特別是看一些庫(kù)的源碼時(shí),經(jīng)常會(huì)看到func(*args, **kwargs)這樣的函數(shù)定義,這個(gè)*和**讓人有點(diǎn)費(fèi)解。其實(shí)只要把函數(shù)參數(shù)定義搞清楚了,就不難理解了。

先說(shuō)說(shuō)函數(shù)定義,我們都知道,下面的代碼定義了一個(gè)函數(shù)funcA

def funcA():

pass

顯然,函數(shù)funcA沒(méi)有參數(shù)(同時(shí)啥也不干:D)。

下面這個(gè)函數(shù)funcB就有兩個(gè)參數(shù)了,

def funcB(a, b):

print a

print b

調(diào)用的時(shí)候,我們需要使用函數(shù)名,加上圓括號(hào)擴(kuò)起來(lái)的參數(shù)列表,比如 funcB(100, 99),執(zhí)行結(jié)果是:

100

99

很明顯,參數(shù)的順序和個(gè)數(shù)要和函數(shù)定義中一致,如果執(zhí)行funcB(100),Python會(huì)報(bào)錯(cuò)的:

TypeError: funcB() takes exactly 2 arguments (1 given)

我們可以在函數(shù)定義中使用參數(shù)默認(rèn)值,比如

def funcC(a, b=0):

print a

print b

在函數(shù)funcC的定義中,參數(shù)b有默認(rèn)值,是一個(gè)可選參數(shù),如果我們調(diào)用funcC(100),b會(huì)自動(dòng)賦值為0。

OK,目前為止,我們要定義一個(gè)函數(shù)的時(shí)候,必須要預(yù)先定義這個(gè)函數(shù)需要多少個(gè)參數(shù)(或者說(shuō)可以接受多少個(gè)參數(shù))。一般情況下這是沒(méi)問(wèn)題的,但是也有在定義函數(shù)的時(shí)候,不能知道參數(shù)個(gè)數(shù)的情況(想一想C語(yǔ)言里的printf函數(shù)),在Python里,帶*的參數(shù)就是用來(lái)接受可變數(shù)量參數(shù)的??匆粋€(gè)例子

def funcD(a, b, *c):

print a

print b

print "length of c is: %d " % len(c)

print c

調(diào)用funcD(1, 2, 3, 4, 5, 6)結(jié)果是

1

2

length of c is: 4

(3, 4, 5, 6)

我們看到,前面兩個(gè)參數(shù)被a、b接受了,剩下的4個(gè)參數(shù),全部被c接受了,c在這里是一個(gè)tuple。我們?cè)谡{(diào)用funcD的時(shí)候,至少要傳遞2個(gè)參數(shù),2個(gè)以上的參數(shù),都放到c里了,如果只有兩個(gè)參數(shù),那么c就是一個(gè)empty tuple。

好了,一顆星我們弄清楚了,下面輪到兩顆星。

上面的例子里,調(diào)用函數(shù)的時(shí)候,傳遞的參數(shù)都是根據(jù)位置來(lái)跟函數(shù)定義里的參數(shù)表匹配的,比如funcB(100, 99)和funcB(99, 100)的執(zhí)行結(jié)果是不一樣的。在Python里,還支持一種用關(guān)鍵字參數(shù)(keyword argument)調(diào)用函數(shù)的辦法,也就是在調(diào)用函數(shù)的時(shí)候,明確指定參數(shù)值付給那個(gè)形參。比如還是上面的funcB(a, b),我們通過(guò)這兩種方式調(diào)用

funcB(a=100, b=99)

funcB(b=99, a=100)

結(jié)果跟funcB(100, 99)都是一樣的,因?yàn)槲覀冊(cè)谑褂藐P(guān)鍵字參數(shù)調(diào)用的時(shí)候,指定了把100賦值給a,99賦值給b。也就是說(shuō),關(guān)鍵字參數(shù)可以讓我們?cè)谡{(diào)用函數(shù)的時(shí)候打亂參數(shù)傳遞的順序!

另外,在函數(shù)調(diào)用中,可以混合使用基于位置匹配的參數(shù)和關(guān)鍵字參數(shù),前題是先給出固定位置的參數(shù),比如

def funcE(a, b, c):

print a

print b

print c

調(diào)用funcE(100, 99, 98)和調(diào)用funcE(100, c=98, b=99)的結(jié)果是一樣的。

好了,經(jīng)過(guò)以上鋪墊,兩顆星總算可以出場(chǎng)了:

如果一個(gè)函數(shù)定義中的最后一個(gè)形參有 ** (雙星號(hào))前綴,所有正常形參之外的其他的關(guān)鍵字參數(shù)都將被放置在一個(gè)字典中傳遞給函數(shù),比如:

def funcF(a, **b):

print a

for x in b:

print x + ": " + str(b[x])

調(diào)用funcF(100, c='你好', b=200),執(zhí)行結(jié)果

100

c: 你好

b: 200

大家可以看到,b是一個(gè)dict對(duì)象實(shí)例,它接受了關(guān)鍵字參數(shù)b和c。

python 一個(gè)函數(shù)怎么使用另一個(gè)函數(shù)內(nèi)的變量

例如一個(gè)函數(shù)內(nèi)有一個(gè)變量i,怎么在函數(shù)外或另一個(gè)函數(shù)中調(diào)用或更改它。新手學(xué)習(xí),謝謝。

==============================

不能在函數(shù)外更改某函數(shù)里的局部變量,因?yàn)槊慨?dāng)你實(shí)例化那個(gè)函數(shù)的時(shí)候,那個(gè)函數(shù)里面的局部變量也會(huì)被重新賦值,重新定義,談何更改呢?

這一個(gè)全部變量和局部變量的問(wèn)題,如果要實(shí)現(xiàn)樓主說(shuō)的,必須使用全局變量(類(lèi)中的self):

================bianliang.py===========

#coding: utf-8

i = 0 #定義一個(gè)全局變量i

def a():

'''

打印出i的值

'''

print i

def b():

global i

a() #調(diào)用a方法

print i #打印i

i = 1000 #重新賦值i

print i #打印i

a() #再次調(diào)用a方法

b()

=================================

%python bianliang.py

1000

1000

這個(gè)py文件里面使用了一個(gè)全局變量i,實(shí)現(xiàn)了a方法和b方法共用參數(shù)i

python中變量的引用、可變和不可變類(lèi)型、局部變量和全局變量

變量的引用

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

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

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

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

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

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

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

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

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

可變和不可變類(lèi)型

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

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

無(wú)論是可變還是不可變數(shù)據(jù)類(lèi)型,通過(guò)賦值語(yǔ)句,都會(huì)改變變量的引用

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

局部變量

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

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

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

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

全局變量

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

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

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

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

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

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

文章標(biāo)題:python函數(shù)間變量 python調(diào)用函數(shù)內(nèi)變量
文章來(lái)源:http://muchs.cn/article22/hgeicc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開(kāi)發(fā)網(wǎng)站收錄、做網(wǎng)站關(guān)鍵詞優(yōu)化、微信公眾號(hào)、網(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è)