一,、函數(shù)Python中的函數(shù)都是語句和表達(dá)式的集合。和shell腳本中的函數(shù)功能一致,,可以把函數(shù)當(dāng)做是給一堆代碼起定義了一個(gè)別名,,當(dāng)需要執(zhí)行這堆代碼時(shí),直接調(diào)用那一堆代碼集合的“別名”即可,。 1、無參函數(shù)定義無參函數(shù)的語法格式如下:
定義無參函數(shù)是以關(guān)鍵字def,,后面跟函數(shù)名和小括號(hào),以冒號(hào)開頭并縮進(jìn),,最后使用return退出函數(shù),,有表達(dá)式則傳遞返回值,,沒有則返回None。函數(shù)是以字母,、數(shù)字和下劃線組成的字符串,,但是不能以數(shù)字開頭。使用函數(shù)必須先定義再調(diào)用,否則程序會(huì)出現(xiàn)錯(cuò)誤,。 無參函數(shù)舉例: 示例一:
也可以將上面的代碼進(jìn)行修改,使用return語句返回結(jié)果值。
在上面的代碼中,,函數(shù)add()使用return語句返回相加的結(jié)果值,,變量i接收函數(shù)add()返回的值,。Python在處理返回值時(shí),如果沒有return語句,,會(huì)默認(rèn)返回None,,程序并不會(huì)報(bào)錯(cuò),。 示例二(九九乘法表):
示例二(一個(gè)簡(jiǎn)易的登陸腳本):
2,、帶參函數(shù)定義無參函數(shù)的語法格式如下:
通過語法可以看出,帶參函數(shù)和無參函數(shù)的區(qū)別是在函數(shù)名稱后面的小括號(hào)有形式參數(shù)列表,,參數(shù)列表實(shí)際上只是占位符,,用于體現(xiàn)參數(shù)的個(gè)數(shù),每個(gè)參數(shù)都沒有提供具體的數(shù)值,。 示例1
示例2上一個(gè)示例中定義的形式參數(shù)是普通的參數(shù),,又稱為位置參數(shù),當(dāng)調(diào)用函數(shù)時(shí),,傳遞的實(shí)際參數(shù)值是根據(jù)位置來跟函數(shù)定義里的參數(shù)表匹配的,,如下:
示例3當(dāng)程序比較繁瑣時(shí),很容易把參數(shù)的順序搞混,,可以使用關(guān)鍵字參數(shù),。關(guān)鍵字參數(shù)是在調(diào)用函數(shù)時(shí),指明參數(shù)賦值給哪個(gè)形參,,如下:
在上面的函數(shù)aa(x,y)中,,調(diào)用時(shí)明確指明了參數(shù)的名稱和對(duì)應(yīng)值(x=10,y=6)和(y=6,x=10),與參數(shù)所在的位置無關(guān),,明確了實(shí)參和形參的對(duì)應(yīng)關(guān)系,,所以輸出的結(jié)果是一樣的。 示例4調(diào)用普通函數(shù)參數(shù)時(shí),,傳入的參數(shù)個(gè)數(shù)必須和聲明的參數(shù)個(gè)數(shù)一致,但關(guān)鍵字參數(shù)有一個(gè)特殊的作用,,可以在定義函數(shù)時(shí)設(shè)置關(guān)鍵字參數(shù)的默認(rèn)值,,此時(shí)傳入函數(shù)的參數(shù)就可以和聲明的參數(shù)個(gè)數(shù)不一致了,如下:
在上面函數(shù)中,,定義時(shí)參數(shù)y的默認(rèn)值是4,,調(diào)用函數(shù)時(shí)可以不傳遞y的值,,只傳遞x的值即可,直接傳值或使用參數(shù)名并賦值都可以,,aa(10)和aa(x=10)的結(jié)果都是相同的,。當(dāng)傳遞y的值是6時(shí),此時(shí)y的默認(rèn)值不起作用,,所以aa(10,6)和aa(x=10,y=6)輸出時(shí),,y的值是6。 注意:定義關(guān)鍵字參數(shù)默認(rèn)值需要注意,,位置參數(shù)必須出現(xiàn)在默認(rèn)參數(shù)之前,,如下代碼中函數(shù)的定義時(shí)錯(cuò)誤的:
示例5(綜合示例)需求如下:
現(xiàn)在對(duì)上述代碼進(jìn)行分段解釋:
在上面代碼中,,位置1處定義了函數(shù)operator(op1,op2,opfu),,參數(shù)op1表示運(yùn)算符前面的數(shù)值,op2表示運(yùn)算符后面的數(shù)值,,opfu表示運(yùn)算符,,然后先判斷opfu是不是“+-*/”中的其中一個(gè),如果不是,返回值是-1,表示程序出錯(cuò),。在接下來就是判斷是哪個(gè)運(yùn)算符號(hào),,就進(jìn)行哪種運(yùn)算處理。但是在判斷除法運(yùn)算符時(shí),,需要加一個(gè)條件,,就是除數(shù)不能是0,因?yàn)槌龜?shù)是0在數(shù)學(xué)上是沒有意義的,,最后只要把運(yùn)算的結(jié)果返回即可,。 第二段代碼:
在上面的代碼中,首先定義了一個(gè)布爾型變量flag,,用于判斷數(shù)值的有效性,,在for循環(huán)語句中,op是傳進(jìn)來的字符串,,使用for循環(huán)判斷它的每一個(gè)字符是不是在“1234567890”中,,如果有一個(gè)不再,說明這個(gè)字符串不能轉(zhuǎn)換為數(shù)值,,flag的值為False,,退出循環(huán),否則flag的值不變,,還是True,,說明字符串可以轉(zhuǎn)換為數(shù)值型。然后接下來做了相應(yīng)的判斷,,把字符串op轉(zhuǎn)換為了整型,,使用的是int()函數(shù)。最后是如果不能轉(zhuǎn)換為整型,,返回的是None,。 第三段代碼:
二,、變量的作用域作用域是指變量在程序中的應(yīng)用范圍,,而變量聲明的位置決定它的作用域,Python按作用域區(qū)分有局部變量和全局變量,。 1,、全局變量:全局變量是指在一個(gè)模塊中最高級(jí)別的變量有全局作用域,除非被刪除,,否則存活到程序運(yùn)行結(jié)束,,所有函數(shù)都能訪問全局變量。 2,、局部變量:局部變量是指定義在函數(shù)內(nèi)的變量有局部作用域,,依賴于定義變量的函數(shù)現(xiàn)階段是否處于活動(dòng)狀態(tài),調(diào)用函數(shù)時(shí),,局部變量產(chǎn)生,,暫時(shí)存在,一旦函數(shù)執(zhí)行完成,,局部變量就不存在了,。 局部變量的作用域僅限于定義它的函數(shù),全局變量的作用域在整個(gè)模塊內(nèi)部都是可見的,。在同一個(gè)函數(shù)中,,不允許有同名的局部變量,在不同函數(shù)中,,可以有同名的局部變量,。在同一個(gè)程序中,全局變量和局部變量同名時(shí),,局部變量具有更高的優(yōu)先級(jí),。 示例:
在上面的代碼中,函數(shù)addage(age)中定義了局部變量age,,在全局范圍定義了全局變量_age,。_age的值是由我們鍵盤輸入的,它在全局都生效,,所以在addage(age)函數(shù)中也可以對(duì)它進(jìn)行引用,。當(dāng)鍵盤輸入是10時(shí),,_age的值是10,調(diào)用“rt=addage(_age)”,,就是把全局變量_age的值10傳給了函數(shù),,此時(shí)addage(age)的局部變量age的值也是10,執(zhí)行age += 1后,,age值成為了11,,而全局變量_age的值不發(fā)生變化,打印輸出“_age=10 age=11”,,函數(shù)的返回值age的值是11,,由rt接收,所以打印“_age=10,rt=11” 通過上面的代碼示例,,可以看出Python采用的是值傳遞的方式,,但實(shí)際上并不是這樣。Python采用的是值傳遞和引用傳遞相結(jié)合的方式,,當(dāng)傳遞可變對(duì)象時(shí)(如字典或者列表),,相當(dāng)于傳引用,而不可變對(duì)象(如數(shù)字,、字符或元組)就是值傳遞,。上面?zhèn)鬟f的是字符串,所以是值傳遞的方式,。 在Python中盡量不使用全局變量,,因?yàn)槌绦蛑锌梢宰杂傻脑L問全局變量,其他人并不知道哪個(gè)變量是全局變量,,非常容易出現(xiàn)引用錯(cuò)誤,,這種錯(cuò)誤也很難發(fā)現(xiàn)和更正的。 局部變量只有在局部中才能使用,,其他范圍是訪問不到的,,如上面的代碼匯總age是局部變量,在全局范圍就引用不到,,比如在上面程序中加上下面這行代碼,,就會(huì)報(bào)錯(cuò)。
錯(cuò)誤顯示age沒有定義,,說明在全局范圍age是訪問不到的,,這個(gè)問題可以使用global關(guān)鍵字解決,global的作用是聲明變量為全局變量,,即使變量定義在函數(shù)內(nèi)部,,加上global后,也可以在全局范圍訪問,,修改后的代碼如下:
上面代碼中做了一些調(diào)整,,主要使用了global定義age,,最后在全局引用age時(shí),可以正常使用,。 在函數(shù)中,,使用global語句聲明的全局變量名不能與其中的局部變量重名,而且盡量要避免在函數(shù)中使用global定義全局變量,,減少程序的不可預(yù)知性,。 三、內(nèi)建函數(shù)Python除了本身的語法結(jié)構(gòu),,還提供了常用的內(nèi)建函數(shù),內(nèi)建函數(shù)是我們經(jīng)常使用到的方法,,可增加程序編寫的效率,,如float()函數(shù)就是內(nèi)建函數(shù)。內(nèi)建函數(shù)是自動(dòng)加載的,,Python的解釋器可以識(shí)別,,它不需要導(dǎo)入模塊,不必做任何操作,,不需要引用就可以調(diào)用,。 1、abs()函數(shù)能夠返回一個(gè)數(shù)字的絕對(duì)值,,即整數(shù),,如下:
2、bool()函數(shù)返回值是TRUE或FALSE,,它是布爾值的簡(jiǎn)寫,,可以用來判斷字符是否為空,如下:
3,、float()函數(shù)用于轉(zhuǎn)換數(shù)據(jù)為float(浮點(diǎn))類型,,字符串和數(shù)字都可以轉(zhuǎn)換為float類型,如果不能轉(zhuǎn)換,,就會(huì)報(bào)錯(cuò),,如下:
4、int()函數(shù)可以將數(shù)據(jù)轉(zhuǎn)換為整數(shù),,如下:
5,、range()函數(shù)可以生成一個(gè)列表,,如下:
6,、sum()函數(shù)可以對(duì)列表中元素求和,,如下:
7,、max()函數(shù)可以返回列表、元組或字符串中最大的元素,,如下:
8,、min()函數(shù)返回列表、元組或字符串中值最小的元素,,和max()正好相反,,如下:
9、dir()函數(shù)可以返回關(guān)于任何值的相關(guān)信息,,可以用于任何對(duì)象,,包括字符串、數(shù)字,、函數(shù),、模塊、對(duì)象和類,。相當(dāng)于幫助手冊(cè),。如下:
10、eval()函數(shù)是可以計(jì)算表達(dá)式的值,。如下:
11,、len()函數(shù)返回一個(gè)對(duì)象的長(zhǎng)度,如下:
附加——lambda函數(shù)lambda函數(shù)的作用是創(chuàng)建匿名函數(shù),,是一種聲明函數(shù)的特殊方式,。
其中params相當(dāng)于函數(shù)接受的參數(shù)列表,expr是函數(shù)返回值的表達(dá)式,。 示例:
實(shí)現(xiàn)的是相同的功能,,但lambda函數(shù)更加簡(jiǎn)潔,只用一條語句實(shí)現(xiàn),,所以lambda也稱為lambda表達(dá)式,,使用lambda只能是表達(dá)式,不能包含if,、for等條件循環(huán)語句,,對(duì)于不需要復(fù)用、簡(jiǎn)單的匿名函數(shù),,使用lambda能起到很好的效果,。 ———————— 本文至此結(jié)束,感謝閱讀 ———————— |
|