def 函數(shù)名():? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
創(chuàng)新互聯(lián)建站專注于企業(yè)成都全網(wǎng)營(yíng)銷推廣、網(wǎng)站重做改版、奈曼網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、HTML5、商城系統(tǒng)網(wǎng)站開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為奈曼等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
? ?函數(shù)體? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ?return? 返回值? ? ? ? ? ? ? ? ? ? ? ? ? ??
def 函數(shù)名(非可選參數(shù),可選參數(shù)):
???函數(shù)體?
return 返回值
def 函數(shù)名(參數(shù),*b):
? ? 函數(shù)體
? ? return 返回值
函數(shù)名 = lambda 參數(shù) : 表達(dá)式
例1:f = lambda x , y? :? x + y? ? ? ? ? ? ? ? ? ? ? ??
調(diào)用:f(6 + 8)? ? ?輸出:14? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
例2:?f = lambda : "沒有參數(shù)的lambda函數(shù)!"
調(diào)用:?print(f())? ? 輸出: 沒有參數(shù)的lambda函數(shù)!
當(dāng)你在一個(gè)程序中使用變量名時(shí),python創(chuàng)建、改變或查找變量名都是在所謂的命名空間中進(jìn)行的,也就是我們要說的變量的作用域。在代碼中給一個(gè)變量賦值的地方?jīng)Q定了這個(gè)變量將存在于哪一個(gè)命名空間,也就是他的可見范圍。
def之中的變量名和def之外的變量名并不沖突,一個(gè)在def之外被賦值(例如,在另外一個(gè)def之中或者在模塊文件的頂層)的變量X與在這個(gè)def之中賦值的變量X是完全不同的變量。
所以我們看出,變量的作用域完全是由變量在程序文件中源代碼的位置而決定,而不是由函數(shù)調(diào)用決定。
說了這么多概念,還是用例子說話吧!
x = 99 def func(): x = 88 print(x) func() print(x) 88 99
這里就可以看出,在這個(gè)模塊文件中:語句X=99,我們創(chuàng)建了一個(gè)名為X的全局變量(在這個(gè)函數(shù)所在的模塊文件中可見),但是X=88這個(gè)賦值語句創(chuàng)建了一個(gè)本地變量X(只在def語句內(nèi)是可見的)。
盡管這兩個(gè)變量都是X,但是他們作用域可以把它們區(qū)別開來。實(shí)際上,函數(shù)的作用域有助于防止程序之中變量名的沖突,并且有助于函數(shù)成為更加獨(dú)立的程序單元。
那下面我們接著展開具體介紹函數(shù)的四個(gè)作用域:LEGB,即L本地作用域,E內(nèi)嵌作用域,G全局作用域和B內(nèi)置作用域。
在一個(gè)函數(shù)中定義的是本地作用域,而模塊(也就是一個(gè)xxx.py文件)中定義的是全局作用域。而內(nèi)置作用域,我們使用時(shí)是直接使用變量名而不需要導(dǎo)入任何模塊,比如一些內(nèi)置的函數(shù)名:print等等
這里再強(qiáng)調(diào)一下python中所謂的全局作用域:
全局作用域的作用范圍僅限于單個(gè)文件,別被全局二字所迷惑,這里的全局指的是一個(gè)文件的頂層的變量名僅對(duì)于這個(gè)文件內(nèi)部的代碼而言是全局的,在python中聽到全局,你就應(yīng)該想到模塊二字。
變量名由模塊文件隔開,并且必須精確的導(dǎo)入一個(gè)模塊文件才能夠使用這個(gè)文件中使用的變量名。
再說說本地作用域:每次對(duì)函數(shù)的調(diào)用都創(chuàng)建一個(gè)新的本地作用域,賦值的變量名除非聲明為全局變量或非本地變量,否則均為本地變量。在默認(rèn)的情況下,所有函數(shù)定義的內(nèi)部變量名都位于本地作用域(與函數(shù)調(diào)用相關(guān)的)內(nèi)。
再來看一個(gè)例子來演示一下這兩種作用域:
x = 99 def func(y): z = x + y return z print(func(1)) 100
這個(gè)例子中出現(xiàn)了全局
因?yàn)閰?shù)給內(nèi)置函數(shù)傳遞值的時(shí)候,內(nèi)置函數(shù)拿到這個(gè)值首先會(huì)對(duì)這個(gè)值的類型進(jìn)行判斷,如果是數(shù)組會(huì)對(duì)他進(jìn)行怎樣的初始化,如果是單個(gè)的常數(shù)會(huì)對(duì)他進(jìn)行怎樣的初始化,這些查看一下內(nèi)置函數(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ī)則:
1.函數(shù)代碼塊以 def 關(guān)鍵詞開頭,后接函數(shù)標(biāo)識(shí)符名稱和圓括號(hào)()。
2.任何傳入?yún)?shù)和自變量必須放在圓括號(hào)中間。圓括號(hào)之間可以用于定義參數(shù)。
3.函數(shù)的第一行語句可以選擇性地使用文檔字符串—用于存放函數(shù)說明。
4.函數(shù)內(nèi)容以冒號(hào)起始,并且縮進(jìn)。
5.return [表達(dá)式] 結(jié)束函數(shù),選擇性地返回一個(gè)值給調(diào)用方。不帶表達(dá)式的return相當(dāng)于返回 None。
語法
Python 定義函數(shù)使用 def 關(guān)鍵字,一般格式如下:
1
2
def 函數(shù)名(參數(shù)列表):
函數(shù)體
默認(rèn)情況下,參數(shù)值和參數(shù)名稱是按函數(shù)聲明中定義的順序匹配起來的。
示例
讓我們使用函數(shù)來輸出"Hello World!":
1
2
def hello() :
print("Hello World!")
輸出結(jié)果
hello()
Hello World!
在python中,定義一個(gè)函數(shù)要使用def語句,依次寫出函數(shù)名、括號(hào)、括號(hào)中的參數(shù)和冒號(hào):,然后在縮進(jìn)塊中編寫函數(shù)體,函數(shù)的返回值用return語句返回
def 函數(shù)名([參數(shù)1,參數(shù)2,...,參數(shù)n]):
函數(shù)體
函數(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