真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python函數(shù)體的范圍,python以什么確定函數(shù)體的范圍

python所有內(nèi)置函數(shù)的定義詳解

1、定義函數(shù)

創(chuàng)新互聯(lián)專注于富裕網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供富裕營(yíng)銷型網(wǎng)站建設(shè),富裕網(wǎng)站制作、富裕網(wǎng)頁設(shè)計(jì)、富裕網(wǎng)站官網(wǎng)定制、重慶小程序開發(fā)服務(wù),打造富裕網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供富裕網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。

函數(shù)是可重用的程序。本書中已經(jīng)使用了許多內(nèi)建函數(shù),如len()函數(shù)和range()函數(shù),但是還沒自定義過函數(shù)。定義函數(shù)的語法格式如下:

def 函數(shù)名(參數(shù)):

函數(shù)體

定義函數(shù)的規(guī)則如下:

①關(guān)鍵字def用來定義一個(gè)函數(shù),它是define的縮寫。

②函數(shù)名是函數(shù)的唯一標(biāo)識(shí),函數(shù)名的命名規(guī)則遵循標(biāo)識(shí)符的命名規(guī)則。

③函數(shù)名后面一定要緊跟著一個(gè)括號(hào),括號(hào)內(nèi)的參數(shù)是可選的,括號(hào)后面要有冒號(hào)。

④函數(shù)體(statement)為一個(gè)或一組Python語句,注意要有縮進(jìn)。

⑤函數(shù)體的第一行可以有文檔字符串,用于描述函數(shù)的功能,用三引號(hào)括起來。

按照定義規(guī)則,可以定義第一個(gè)函數(shù)了:

def?hello_world():

...?????print('Hello,world!')???#?注意函數(shù)體要有縮進(jìn)

...

hello_world()

Hello,world!

這個(gè)函數(shù)不帶任何參數(shù),它的功能是打印出“Hello,world!”。最后一行代碼hello_world()是調(diào)用函數(shù),即讓Python執(zhí)行函數(shù)的代碼。

2、全局變量和局部變量

全局變量是定義在所有函數(shù)外的變量。例如,定義一個(gè)全局變量a,分別在函數(shù)test1()和test2()使用變量a:

a?=?100???#?全局變量

def?test1():

...?????print(a)

...

def?test2():

...?????print(a)

...

test1()

100

test2()

100

定義了全局變量a之后,在函數(shù)test1()和test2()內(nèi)都可以使用變量a,由此可知,全局變量的作用范圍是全局。

局部變量是在函數(shù)內(nèi)定義的變量,除了用關(guān)鍵字global修飾的變量以外。例如,在函數(shù)test1()內(nèi)定義一個(gè)局部變量a,分別在函數(shù)外和另一個(gè)函數(shù)test2()內(nèi)使用變量a:

def?test1():

...?????a?=?100???#?局部變量

...?????print(a)

...

def?test2():

...?????print(a)

...

test1()

100

print(a)

Traceback?(most?recent?call?last):

File?"stdin",?line?1,?in?module

NameError:?name?'a'?is?not?defined

test2()

Traceback?(most?recent?call?last):

File?"stdin",?line?1,?in?module

File?"stdin",?line?2,?in?test2

NameError:?name?'a'?is?not?defined

Python解釋器提示出錯(cuò)了。由于局部變量a定義在函數(shù)test1()內(nèi),因此,在函數(shù)test1()內(nèi)可以使用變量a,但是在函數(shù)外或者另一個(gè)函數(shù)test2()內(nèi)使用變量a,都會(huì)報(bào)錯(cuò),由此可見,局部變量的作用范圍是定義它的函數(shù)內(nèi)部。

一般情況下,在函數(shù)內(nèi)聲明的變量都是局部變量,但是采用關(guān)鍵字global修飾的變量卻是全局變量:

def?test1():

...?????global?a???#?全局變量

...?????a?=?100

...?????print(a)

...

def?test2():

...?????print(a)

...

test1()

100

print(a)

100

test2()

100

這個(gè)程序與上個(gè)程序相比,只是在函數(shù)test1()中多了一行代碼“global a”,程序便可以正確運(yùn)行了。在函數(shù)test1()中,采用關(guān)鍵字global修飾了變量a之后,變量a就變成了全局變量,不僅可以在該函數(shù)內(nèi)使用,還可以在函數(shù)外或者其他函數(shù)內(nèi)使用。

如果在某個(gè)函數(shù)內(nèi)局部變量與全局變量同名,那么在該函數(shù)中局部變量會(huì)覆蓋全局變量:

a?=?100???#?全局變量

def?test1():

...?????a?=?200???#?同名局部變量

...?????print(a)

...

def?test2():

...?????print(a)

...

test1()

200

test2()

100

由于在函數(shù)test1()中定義了一個(gè)與全局變量同名的局部變量a,因此,在函數(shù)test1()中全局變量a的值被局部變量覆蓋了,但是在函數(shù)test2()中全局變量a的值沒有被覆蓋。

綜上所述,在Python中,全局變量保存的數(shù)據(jù)供整個(gè)腳本文件使用;而局部變量只用于臨時(shí)保存數(shù)據(jù),變量?jī)H供局部代碼塊使用。

python怎么表示范圍

python表示范圍的方法:

使用range函數(shù)可以表示范圍,例如:“range(0, 10)”表示從零到九

示例如下:

for i in range(0, 10):

print(i)

執(zhí)行結(jié)果:

更多Python知識(shí),請(qǐng)關(guān)注:Python自學(xué)網(wǎng)!!

python的應(yīng)用范圍有哪些?

Python是一門簡(jiǎn)單、易學(xué)并且很有前途的編程語言,很多人都對(duì)Python感興趣,但是當(dāng)學(xué)完P(guān)ython基礎(chǔ)用法之后,又會(huì)產(chǎn)生迷茫,尤其是自學(xué)的人員,不知道接下來的Python學(xué)習(xí)方向,以及學(xué)完之后能干些什么?以下是Python十大應(yīng)用領(lǐng)域!

1. WEB開發(fā)

Python擁有很多免費(fèi)數(shù)據(jù)函數(shù)庫、免費(fèi)web網(wǎng)頁模板系統(tǒng)、以及與web服務(wù)器進(jìn)行交互的庫,可以實(shí)現(xiàn)web開發(fā),搭建web框架,目前比較有名氣的Python web框架為Django。從事該領(lǐng)域應(yīng)從數(shù)據(jù)、組件、安全等多領(lǐng)域進(jìn)行學(xué)習(xí),從底層了解其工作原理并可駕馭任何業(yè)內(nèi)主流的Web框架。

2. 網(wǎng)絡(luò)編程

網(wǎng)絡(luò)編程是Python學(xué)習(xí)的另一方向,網(wǎng)絡(luò)編程在生活和開發(fā)中無處不在,哪里有通訊就有網(wǎng)絡(luò),它可以稱為是一切開發(fā)的“基石”。對(duì)于所有編程開發(fā)人員必須要知其然并知其所以然,所以網(wǎng)絡(luò)部分將從協(xié)議、封包、解包等底層進(jìn)行深入剖析。

3. 爬蟲開發(fā)

在爬蟲領(lǐng)域,Python幾乎是霸主地位,將網(wǎng)絡(luò)一切數(shù)據(jù)作為資源,通過自動(dòng)化程序進(jìn)行有針對(duì)性的數(shù)據(jù)采集以及處理。從事該領(lǐng)域應(yīng)學(xué)習(xí)爬蟲策略、高性能異步IO、分布式爬蟲等,并針對(duì)Scrapy框架源碼進(jìn)行深入剖析,從而理解其原理并實(shí)現(xiàn)自定義爬蟲框架。

4. 云計(jì)算開發(fā)

Python是從事云計(jì)算工作需要掌握的一門編程語言,目前很火的云計(jì)算框架OpenStack就是由Python開發(fā)的,如果想要深入學(xué)習(xí)并進(jìn)行二次開發(fā),就需要具備Python的技能。

5. 人工智能

MASA和Google早期大量使用Python,為Python積累了豐富的科學(xué)運(yùn)算庫,當(dāng)AI時(shí)代來臨后,Python從眾多編程語言中脫穎而出,各種人工智能算法都基于Python編寫,尤其PyTorch之后,Python作為AI時(shí)代頭牌語言的位置基本確定。

6. 自動(dòng)化運(yùn)維

Python是一門綜合性的語言,能滿足絕大部分自動(dòng)化運(yùn)維需求,前端和后端都可以做,從事該領(lǐng)域,應(yīng)從設(shè)計(jì)層面、框架選擇、靈活性、擴(kuò)展性、故障處理、以及如何優(yōu)化等層面進(jìn)行學(xué)習(xí)。

7. 金融分析

金融分析包含金融知識(shí)和Python相關(guān)模塊的學(xué)習(xí),學(xué)習(xí)內(nèi)容囊括Numpy\Pandas\Scipy數(shù)據(jù)分析模塊等,以及常見金融分析策略如“雙均線”、“周規(guī)則交易”、“羊駝策略”、“Dual Thrust 交易策略”等。

8. 科學(xué)運(yùn)算

Python是一門很適合做科學(xué)計(jì)算的編程語言,97年開始,NASA就大量使用Python進(jìn)行各種復(fù)雜的科學(xué)運(yùn)算,隨著NumPy、SciPy、Matplotlib、Enthought librarys等眾多程序庫的開發(fā),使得Python越來越適合做科學(xué)計(jì)算、繪制高質(zhì)量的2D和3D圖像。

9. 游戲開發(fā)

在網(wǎng)絡(luò)游戲開發(fā)中,Python也有很多應(yīng)用,相比于Lua or C++,Python比Lua有更高階的抽象能力,可以用更少的代碼描述游戲業(yè)務(wù)邏輯,Python非常適合編寫1萬行以上的項(xiàng)目,而且能夠很好的把網(wǎng)游項(xiàng)目的規(guī)模控制在10萬行代碼以內(nèi)。

10. 桌面軟件

Python在圖形界面開發(fā)上很強(qiáng)大,可以用tkinter/PyQT框架開發(fā)各種桌面軟件!

Python其實(shí)很簡(jiǎn)單 第十二章 函數(shù)與變量的作用域

在前面已經(jīng)多次提到函數(shù)這個(gè)概念,之所以沒有解釋什么是函數(shù),是因?yàn)槌绦蛑械暮瘮?shù)和數(shù)學(xué)中的函數(shù)差不多,如input()、range()等都是函數(shù),這些都是Python的標(biāo)準(zhǔn)函數(shù),直接使用就可以了。根據(jù)需要,用戶也可以自定義函數(shù)。

12.1 函數(shù)

函數(shù)的結(jié)構(gòu):

def 函數(shù)名(參數(shù)):

函數(shù)體

return 返回值

例如:數(shù)學(xué)中的函數(shù)f(x)=2x+5在Python中可以定義如下:

def f(x):

y=2*x+5

return(y)

如果x取值為3,可以使用如下語句調(diào)用函數(shù):

f(3)

下面給出完整的程序代碼:

def f(x):

y=2*x+5

return(y)

res=f(3)

print(res)

運(yùn)行結(jié)果:11

如上例中的x是函數(shù)f(x)的參數(shù),有時(shí)也被稱為形式參數(shù)(簡(jiǎn)稱形參),在函數(shù)被調(diào)用時(shí),x被具體的值3替換y就是函數(shù)的返回值,這個(gè)值3也被稱為實(shí)際參數(shù)(簡(jiǎn)稱實(shí)參)。

上例中的y是函數(shù)f(x)的返回值。并不是所有的函數(shù)都有參數(shù)和返回值。如下面的函數(shù):

def func():

print('此為無參數(shù)傳遞、無返回值的函數(shù)')

func()

輸出結(jié)果:此為無參數(shù)傳遞、無返回值的函數(shù)

可以看出,該函數(shù)func()無參數(shù),故調(diào)用時(shí)不用賦給參數(shù)值。

函數(shù)也可以有多個(gè)參數(shù),如f(x,y)=x2+y2,可用Python語言定義如下:

def f(x,y):

z=x**2+y**2

return z

print(f(2,3)) #調(diào)用函數(shù)f(x,y)

輸出結(jié)果:13

也可以通過直接給參數(shù)列表中的參數(shù)賦值的方法,為參數(shù)添加默認(rèn)值,如果用戶賦予參數(shù)值,則按照用戶賦值執(zhí)行,否則使用默認(rèn)值。例如:

def f(x,y=3):

z=x**2+y**2

return z

若調(diào)用時(shí)參數(shù)列表為(2,1),即x賦值為2,y賦值為1:

print(f(2,1))

輸出結(jié)果為:5

若調(diào)用時(shí)參數(shù)列表為(2),即x賦值為2,y賦值省缺,則y使用默認(rèn)值:

print(f(2))

輸出結(jié)果為:13

回調(diào)函數(shù),又稱函數(shù)回調(diào),是將函數(shù)作為另一函數(shù)的參數(shù)。

例如:

def func(fun,m,n):

fun(m,n)

def f_add(m,n):

print('m+n=',m+n)

def f_mult(m,n):

print('m*n=',m*n)

func(f_add,2,3)

func(f_mult,2,3)

輸出結(jié)果:

m+n= 5

m*n= 6

在f_add(m,n)和f_mult(m,n)被定義前,func(fun,m,n)中的fun(m,n)就已經(jīng)調(diào)用了這兩個(gè)函數(shù),即“先調(diào)用后定義”,這也是回調(diào)函數(shù)的特點(diǎn)。

如果無法預(yù)知參數(shù)的個(gè)數(shù),可以在參數(shù)前面加上*號(hào),這種參數(shù)實(shí)際上對(duì)應(yīng)元組類型。譬如,參會(huì)的人數(shù)事先不能確定,只能根據(jù)與會(huì)人員名單輸入:

def func(*names):

print('今天與會(huì)人員有:')

for name in names:

print(name)

func('張小兵','陳曉梅','李大海','王長(zhǎng)江')

運(yùn)行后,輸出結(jié)果為:

今天與會(huì)人員有:

張小兵

陳曉梅

李大海

王長(zhǎng)江

參數(shù)為字典類型,需要在參數(shù)前面加上**號(hào)。

def func(**kwargs):

for i in kwargs:

print(i,kwargs[i])

func(a='a1',b='b1',c='c1')

輸出結(jié)果為:

a a1

b b1

c c1

一個(gè)有趣的實(shí)例:

def func(x,y,z,*args,**kwargs):

print(x,y,z)

print(args)

print(kwargs)

func('a','b','c','Python','is easy',py='python',j='java',ph='php')

輸出結(jié)果:

a b c # 前三個(gè)實(shí)參賦給前三個(gè)形參

('Python', 'is easy') # *args接收元組數(shù)據(jù)

{'py': 'python', 'j': 'java', 'ph': 'php'} # **kwargs接收字典數(shù)據(jù)

12.2 變量的作用域

變量的作用域即變量的有效范圍,可分為全局變量和局部變量。

局部變量

在函數(shù)中定義的變量就是局部變量,局部變量的作用域僅限于函數(shù)內(nèi)部使用。

全局變量

在主程序中定義的變量就是全局變量,但在函數(shù)中用關(guān)鍵字global修飾的變量也可以當(dāng)做全局變量來使用。

全局變量的作用域是整個(gè)程序,也就是說,全局變量可以在整個(gè)程序中可以訪問。

下面通過實(shí)例去討論:

程序1:

a=1 # a為全局變量

def a_add():

print('a的初值:',a) # 在函數(shù)中讀取a的值

a_add() # 調(diào)用函數(shù)a_add()

a+=1 # 主程序語句,a增加1

print('a現(xiàn)在的值是:',a) # 主程序語句,讀取a的值

運(yùn)行結(jié)果:

a的初值: 1

a現(xiàn)在的值是: 2

這個(gè)結(jié)果和我們想象的一樣,全局變量a既可以在主程序中讀取,也可以在子程序(函數(shù))中讀取。

程序2:

a=1

def a_add():

a+=1

print('a的初值:',a)

a_add()

print('a現(xiàn)在的值是:',a)

運(yùn)行程序1時(shí)出現(xiàn)如下錯(cuò)誤提示:

UnboundLocalError: local variable 'a' referenced before assignment

意思是:局部變量'a'在賦值之前被引用。

從語法上來講,該程序沒有錯(cuò)誤。首先定義了一個(gè)全局變量a并賦值為1,又定義了一個(gè)函數(shù)a_add(),函數(shù)內(nèi)的語句a+=1就是出錯(cuò)的根源,雖然我們的初衷是想讓全局變量a的值增加1,但從錯(cuò)誤提示看,這個(gè)語句中的a并不是全局變量,而是局部變量??磥?,在函數(shù)中讀取全局變量的值是沒有問題的(在程序1中已經(jīng)得到了驗(yàn)證),但要在函數(shù)中改變?nèi)肿兞康闹凳遣恍械模ㄔ诔绦?的錯(cuò)誤提示a+=1中的a 是局部變量,而非全局變量)。

怎樣解決這個(gè)問題?

程序3:

a=1

def a_add(x):

x+=1

return x

print('a的初值:',a)

a=a_add(a)

print('a現(xiàn)在的值是:',a)

運(yùn)行結(jié)果:

a的初值: 1

a現(xiàn)在的值是: 2

結(jié)果的確是正確的,但在函數(shù)a_add(x)中沒有調(diào)用變量a(沒有出現(xiàn)變量a)。

程序4:

a=1

def a_add(a):

a+=1

return a

print('a的初值:',a)

a=a_add(a)

print('a現(xiàn)在的值是:',a)

運(yùn)行結(jié)果:

a的初值: 1

a現(xiàn)在的值是: 2

對(duì)比程序4和程序3不難發(fā)現(xiàn),其實(shí)程序4只是簡(jiǎn)單的把函數(shù)的參數(shù)x變成了a,這個(gè)a的實(shí)質(zhì)和程序3中的x還是一樣的。這進(jìn)一步證實(shí),函數(shù)中的a是局部變量,與主程序的全局變量a有著本質(zhì)的區(qū)別。

程序5:

a=1

def a_add():

global a

a+=1

print('a的初值:',a)

a_add()

print('a現(xiàn)在的值是:',a)

運(yùn)行結(jié)果:

a的初值: 1

a現(xiàn)在的值是: 2

程序5和程序2相比較,僅僅是在函數(shù)中添加了一個(gè)定義“global a”,此時(shí)的局部變量a就可以當(dāng)做全局變量使用,由于它和全局變量a同名,自然也就不用區(qū)分a究竟是全局變量還是局部變量了,在主程序和該函數(shù)內(nèi)都可以訪問、修改變量a的值了。

雖然使用global可使變量使用起來非常方便,但也容易引起混淆,故在使用過程中還是謹(jǐn)慎為好。

12.3 函數(shù)的遞歸與嵌套

遞歸,就是函數(shù)調(diào)用它自身。遞歸必須設(shè)置停止條件,否則函數(shù)將無法終止,形成死循環(huán)。

以計(jì)算階乘為例:

def func(n):

if n==1:

return 1

else:

return n*func(n-1) #func( )調(diào)用func( )

print(func(5))

運(yùn)行結(jié)果為:120

嵌套,指在函數(shù)中調(diào)用另外的函數(shù)。這是程序中常見的一種結(jié)構(gòu),在此不再贅述。

匿名函數(shù)

Python中可以在參數(shù)前加上關(guān)鍵字lambda定義一個(gè)匿名函數(shù),這樣的函數(shù)一般都屬于“一次性”的。

例如:

程序1:這是一個(gè)常規(guī)的函數(shù)定義和調(diào)用。

def f_add(x,y):

return x+y

print(f_add(2,3))

輸出結(jié)果:5

程序2:使用lambda定義匿名函數(shù)。

f_add=lambda x,y:x+y

print(f_add(2,3))

輸出結(jié)果:5

從上面的代碼可以看出,使用lambda僅僅減少了一行代碼。f_add=lambda x,y:x+y中的f_add不是變量名,而是函數(shù)名。程序1和程序2的print( )語句中的參數(shù)都是一樣的——調(diào)用函數(shù)f_add( )。所以,匿名函數(shù)并沒有太多的優(yōu)點(diǎn)。

python中range()函數(shù)的用法

python中range()函數(shù)的用法:

(1)range(stop)

創(chuàng)建一個(gè)(0,stop)之間的整數(shù)序列,步長(zhǎng)為1。

(2)range(start,stop)

創(chuàng)建一個(gè)(start,stop)之間的整數(shù)序列,步長(zhǎng)為1。

(3)range(start,stop,step)

創(chuàng)建一個(gè)[start,stop)之間的整數(shù)序列,步長(zhǎng)為step。

參數(shù)介紹:

start:表示從返回序列的起始編號(hào),默認(rèn)情況下從0開始。

stop:表示生成最多但不包括此數(shù)字的數(shù)字。

step:指的是序列中每個(gè)數(shù)字之間的差異,默認(rèn)值為1。

相關(guān)介紹

range()是Python的內(nèi)置函數(shù),在用戶需要執(zhí)行特定次數(shù)的操作時(shí)使用它,表示循環(huán)的意思。內(nèi)置函數(shù)range()可用于以列表的形式生成數(shù)字序列。在range()函數(shù)中最常見用法是使用for和while循環(huán)迭代序列類型(List,string等)。

簡(jiǎn)單的來說,range()函數(shù)允許用戶在給定范圍內(nèi)生成一系列數(shù)字。根據(jù)用戶傳遞給函數(shù)的參數(shù)數(shù)量,用戶可以決定該系列數(shù)字的開始和結(jié)束位置以及一個(gè)數(shù)字與下一個(gè)數(shù)字之間的差異有多大。

Python的函數(shù)都有哪些?

Python 函數(shù)

函數(shù)是組織好的,可重復(fù)使用的,用來實(shí)現(xiàn)單一,或相關(guān)聯(lián)功能的代碼段。

函數(shù)能提高應(yīng)用的模塊性,和代碼的重復(fù)利用率。你已經(jīng)知道Python提供了許多內(nèi)建函數(shù),比如print()。但你也可以自己創(chuàng)建函數(shù),這被叫做用戶自定義函數(shù)。

定義一個(gè)函數(shù)

你可以定義一個(gè)由自己想要功能的函數(shù),以下是簡(jiǎn)單的規(guī)則:

函數(shù)代碼塊以?def?關(guān)鍵詞開頭,后接函數(shù)標(biāo)識(shí)符名稱和圓括號(hào)()。

任何傳入?yún)?shù)和自變量必須放在圓括號(hào)中間。圓括號(hào)之間可以用于定義參數(shù)。

函數(shù)的第一行語句可以選擇性地使用文檔字符串—用于存放函數(shù)說明。

函數(shù)內(nèi)容以冒號(hào)起始,并且縮進(jìn)。

return [表達(dá)式]?結(jié)束函數(shù),選擇性地返回一個(gè)值給調(diào)用方。不帶表達(dá)式的return相當(dāng)于返回 None。

語法

def functionname( parameters ): ? "函數(shù)_文檔字符串"

function_suite

return [expression]

默認(rèn)情況下,參數(shù)值和參數(shù)名稱是按函數(shù)聲明中定義的順序匹配起來的。

實(shí)例

以下為一個(gè)簡(jiǎn)單的Python函數(shù),它將一個(gè)字符串作為傳入?yún)?shù),再打印到標(biāo)準(zhǔn)顯示設(shè)備上。

實(shí)例(Python 2.0+)

def printme( str ): ? "打印傳入的字符串到標(biāo)準(zhǔn)顯示設(shè)備上"

print str

return

函數(shù)調(diào)用

定義一個(gè)函數(shù)只給了函數(shù)一個(gè)名稱,指定了函數(shù)里包含的參數(shù),和代碼塊結(jié)構(gòu)。

這個(gè)函數(shù)的基本結(jié)構(gòu)完成以后,你可以通過另一個(gè)函數(shù)調(diào)用執(zhí)行,也可以直接從Python提示符執(zhí)行。

如下實(shí)例調(diào)用了printme()函數(shù):

實(shí)例(Python 2.0+)

#!/usr/bin/python# -*- coding: UTF-8 -*-

# 定義函數(shù)def printme( str ): ? "打印任何傳入的字符串"

print str

return

# 調(diào)用函數(shù)printme("我要調(diào)用用戶自定義函數(shù)!")printme("再次調(diào)用同一函數(shù)")

以上實(shí)例輸出結(jié)果:

我要調(diào)用用戶自定義函數(shù)!再次調(diào)用同一函數(shù)

參數(shù)傳遞

在 python 中,類型屬于對(duì)象,變量是沒有類型的:

a=[1,2,3]

a="Runoob"

以上代碼中,[1,2,3]?是 List 類型,"Runoob"?是 String 類型,而變量 a 是沒有類型,她僅僅是一個(gè)對(duì)象的引用(一個(gè)指針),可以是 List 類型對(duì)象,也可以指向 String 類型對(duì)象。

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

在 python 中,strings, tuples, 和 numbers 是不可更改的對(duì)象,而 list,dict 等則是可以修改的對(duì)象。

不可變類型:變量賦值?a=5?后再賦值?a=10,這里實(shí)際是新生成一個(gè) int 值對(duì)象 10,再讓 a 指向它,而 5 被丟棄,不是改變a的值,相當(dāng)于新生成了a。

可變類型:變量賦值?la=[1,2,3,4]?后再賦值?la[2]=5?則是將 list la 的第三個(gè)元素值更改,本身la沒有動(dòng),只是其內(nèi)部的一部分值被修改了。

python 函數(shù)的參數(shù)傳遞:

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

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

python 中一切都是對(duì)象,嚴(yán)格意義我們不能說值傳遞還是引用傳遞,我們應(yīng)該說傳不可變對(duì)象和傳可變對(duì)象。

python 傳不可變對(duì)象實(shí)例

實(shí)例(Python 2.0+)

#!/usr/bin/python# -*- coding: UTF-8 -*-

def ChangeInt( a ): ? ?a = 10

b = 2ChangeInt(b)print b # 結(jié)果是 2

實(shí)例中有 int 對(duì)象 2,指向它的變量是 b,在傳遞給 ChangeInt 函數(shù)時(shí),按傳值的方式復(fù)制了變量 b,a 和 b 都指向了同一個(gè) Int 對(duì)象,在 a=10 時(shí),則新生成一個(gè) int 值對(duì)象 10,并讓 a 指向它。

傳可變對(duì)象實(shí)例

實(shí)例(Python 2.0+)

#!/usr/bin/python# -*- coding: UTF-8 -*-

# 可寫函數(shù)說明def changeme( mylist ): ? "修改傳入的列表"

mylist.append([1,2,3,4])

print "函數(shù)內(nèi)取值: ", mylist

return

# 調(diào)用changeme函數(shù)mylist = [10,20,30]changeme( mylist )print "函數(shù)外取值: ", mylist

實(shí)例中傳入函數(shù)的和在末尾添加新內(nèi)容的對(duì)象用的是同一個(gè)引用,故輸出結(jié)果如下:

函數(shù)內(nèi)取值: ?[10, 20, 30, [1, 2, 3, 4]]函數(shù)外取值: ?[10, 20, 30, [1, 2, 3, 4]]

參數(shù)

以下是調(diào)用函數(shù)時(shí)可使用的正式參數(shù)類型:

必備參數(shù)

關(guān)鍵字參數(shù)

默認(rèn)參數(shù)

不定長(zhǎng)參數(shù)

必備參數(shù)

必備參數(shù)須以正確的順序傳入函數(shù)。調(diào)用時(shí)的數(shù)量必須和聲明時(shí)的一樣。

調(diào)用printme()函數(shù),你必須傳入一個(gè)參數(shù),不然會(huì)出現(xiàn)語法錯(cuò)誤:

實(shí)例(Python 2.0+)

#!/usr/bin/python# -*- coding: UTF-8 -*-

#可寫函數(shù)說明def printme( str ): ? "打印任何傳入的字符串"

print str

return

#調(diào)用printme函數(shù)printme()

以上實(shí)例輸出結(jié)果:

Traceback (most recent call last):

File "test.py", line 11, in module

printme()TypeError: printme() takes exactly 1 argument (0 given)

關(guān)鍵字參數(shù)

關(guān)鍵字參數(shù)和函數(shù)調(diào)用關(guān)系緊密,函數(shù)調(diào)用使用關(guān)鍵字參數(shù)來確定傳入的參數(shù)值。

使用關(guān)鍵字參數(shù)允許函數(shù)調(diào)用時(shí)參數(shù)的順序與聲明時(shí)不一致,因?yàn)?Python 解釋器能夠用參數(shù)名匹配參數(shù)值。

以下實(shí)例在函數(shù) printme() 調(diào)用時(shí)使用參數(shù)名:

實(shí)例(Python 2.0+)

#!/usr/bin/python# -*- coding: UTF-8 -*-

#可寫函數(shù)說明def printme( str ): ? "打印任何傳入的字符串"

print str

return

#調(diào)用printme函數(shù)printme( str = "My string")

以上實(shí)例輸出結(jié)果:

My string

下例能將關(guān)鍵字參數(shù)順序不重要展示得更清楚:

實(shí)例(Python 2.0+)

#!/usr/bin/python# -*- coding: UTF-8 -*-

#可寫函數(shù)說明def printinfo( name, age ): ? "打印任何傳入的字符串"

print "Name: ", name

print "Age ", age

return

#調(diào)用printinfo函數(shù)printinfo( age=50, name="miki" )

以上實(shí)例輸出結(jié)果:

Name: ?mikiAge ?50

默認(rèn)參數(shù)

調(diào)用函數(shù)時(shí),默認(rèn)參數(shù)的值如果沒有傳入,則被認(rèn)為是默認(rèn)值。下例會(huì)打印默認(rèn)的age,如果age沒有被傳入:

實(shí)例(Python 2.0+)

#!/usr/bin/python# -*- coding: UTF-8 -*-

#可寫函數(shù)說明def printinfo( name, age = 35 ): ? "打印任何傳入的字符串"

print "Name: ", name

print "Age ", age

return

#調(diào)用printinfo函數(shù)printinfo( age=50, name="miki" )printinfo( name="miki" )

以上實(shí)例輸出結(jié)果:

Name: ?mikiAge ?50Name: ?mikiAge ?35

不定長(zhǎng)參數(shù)

你可能需要一個(gè)函數(shù)能處理比當(dāng)初聲明時(shí)更多的參數(shù)。這些參數(shù)叫做不定長(zhǎng)參數(shù),和上述2種參數(shù)不同,聲明時(shí)不會(huì)命名?;菊Z法如下:

def functionname([formal_args,] *var_args_tuple ): ? "函數(shù)_文檔字符串"

function_suite

return [expression]

加了星號(hào)(*)的變量名會(huì)存放所有未命名的變量參數(shù)。不定長(zhǎng)參數(shù)實(shí)例如下:

實(shí)例(Python 2.0+)

#!/usr/bin/python# -*- coding: UTF-8 -*-

# 可寫函數(shù)說明def printinfo( arg1, *vartuple ): ? "打印任何傳入的參數(shù)"

print "輸出: "

print arg1

for var in vartuple: ? ? ?print var

return

# 調(diào)用printinfo 函數(shù)printinfo( 10 )printinfo( 70, 60, 50 )

以上實(shí)例輸出結(jié)果:

輸出:10輸出:706050

匿名函數(shù)

python 使用 lambda 來創(chuàng)建匿名函數(shù)。

lambda只是一個(gè)表達(dá)式,函數(shù)體比def簡(jiǎn)單很多。

lambda的主體是一個(gè)表達(dá)式,而不是一個(gè)代碼塊。僅僅能在lambda表達(dá)式中封裝有限的邏輯進(jìn)去。

lambda函數(shù)擁有自己的命名空間,且不能訪問自有參數(shù)列表之外或全局命名空間里的參數(shù)。

雖然lambda函數(shù)看起來只能寫一行,卻不等同于C或C++的內(nèi)聯(lián)函數(shù),后者的目的是調(diào)用小函數(shù)時(shí)不占用棧內(nèi)存從而增加運(yùn)行效率。

語法

lambda函數(shù)的語法只包含一個(gè)語句,如下:

lambda [arg1 [,arg2,.....argn]]:expression

如下實(shí)例:

實(shí)例(Python 2.0+)

#!/usr/bin/python# -*- coding: UTF-8 -*-

# 可寫函數(shù)說明sum = lambda arg1, arg2: arg1 + arg2

# 調(diào)用sum函數(shù)print "相加后的值為 : ", sum( 10, 20 )print "相加后的值為 : ", sum( 20, 20 )

以上實(shí)例輸出結(jié)果:

相加后的值為 : ?30相加后的值為 : ?40

return 語句

return語句[表達(dá)式]退出函數(shù),選擇性地向調(diào)用方返回一個(gè)表達(dá)式。不帶參數(shù)值的return語句返回None。之前的例子都沒有示范如何返回?cái)?shù)值,下例便告訴你怎么做:

實(shí)例(Python 2.0+)

#!/usr/bin/python# -*- coding: UTF-8 -*-

# 可寫函數(shù)說明def sum( arg1, arg2 ): ? # 返回2個(gè)參數(shù)的和."

total = arg1 + arg2

print "函數(shù)內(nèi) : ", total

return total

# 調(diào)用sum函數(shù)total = sum( 10, 20 )

以上實(shí)例輸出結(jié)果:

函數(shù)內(nèi) : ?30

變量作用域

一個(gè)程序的所有的變量并不是在哪個(gè)位置都可以訪問的。訪問權(quán)限決定于這個(gè)變量是在哪里賦值的。

變量的作用域決定了在哪一部分程序你可以訪問哪個(gè)特定的變量名稱。兩種最基本的變量作用域如下:

全局變量

局部變量

全局變量和局部變量

定義在函數(shù)內(nèi)部的變量擁有一個(gè)局部作用域,定義在函數(shù)外的擁有全局作用域。

局部變量只能在其被聲明的函數(shù)內(nèi)部訪問,而全局變量可以在整個(gè)程序范圍內(nèi)訪問。調(diào)用函數(shù)時(shí),所有在函數(shù)內(nèi)聲明的變量名稱都將被加入到作用域中。如下實(shí)例:

實(shí)例(Python 2.0+)

#!/usr/bin/python# -*- coding: UTF-8 -*-

total = 0 # 這是一個(gè)全局變量# 可寫函數(shù)說明def sum( arg1, arg2 ): ? #返回2個(gè)參數(shù)的和."

total = arg1 + arg2 # total在這里是局部變量.

print "函數(shù)內(nèi)是局部變量 : ", total

return total

#調(diào)用sum函數(shù)sum( 10, 20 )print "函數(shù)外是全局變量 : ", total

以上實(shí)例輸出結(jié)果:

函數(shù)內(nèi)是局部變量 : ?30函數(shù)外是全局變量 : ?0


分享文章:python函數(shù)體的范圍,python以什么確定函數(shù)體的范圍
路徑分享:http://weahome.cn/article/dseshpp.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部