python基礎-函數(9)

1、函數的介紹

若是在開發程序時,須要某塊代碼屢次,可是爲了提升編寫的效率以及代碼的重用,因此把具備獨立功能的代碼塊組織爲一個小模塊,這就是函數python

函數的語法格式:express

def 函數名(): 函數的功能代碼

注意:python不像其餘編程語言使用{}控制做用域,python嚴格使用縮進控制做用域,因此在python中使用,函數要嚴格的控制縮進。編程

 

2、函數的調用

定義了函數以後,就至關於有了一個具備某些功能的代碼,想要讓這些代碼可以執行,須要調用它,調用函數很簡單的,編程語言

經過  函數名()  便可完成調用函數

def printMenu(): print("-----------------------------------") print(" 一、查詢 ") print(" 二、修改 ") print(" 三、增長 ") print("-----------------------------------") #函數的調用
printMenu() #函數能夠重複調用
printMenu()

運行結果爲:spa

-----------------------------------
               1、查詢 2、修改 3、增長 -----------------------------------
-----------------------------------
               1、查詢 2、修改 3、增長 -----------------------------------

說明:設計

  1. 函數在調用前,必定要先聲明定義,才能使用函數
  2. 在聲明定義好以後,能夠在須要的地方屢次調用。
  3. 函數的調用就是函數名(),例如代碼彙總的printMenu()

 

3、帶有參數的函數

參數分爲實參和形參兩種形式code

  • 實參 – 在調用函數的時候給函數參與運算的真實數據
  • 形參 – 在函數聲明的時候用來給真實數據作佔位使用的虛擬數據

帶參數函數的定義格式:blog

def 函數名(形參1,形參2,形參3....): 要執行的代碼

舉個例子:排序

#定義一個具備兩個形式參數的函數
def sum(a,b):#a,b就是形參
    result = a+b print(result) #sum()函數的調用
sum(4,5)#4,5就是真實參數

運行結果爲:9

帶參數函數的精髓就是,能夠靈活的處理數據的運算。

 

4、函數的返回值

所謂「返回值」,就是程序中函數完成一件事情後,最後給調用者的結果,就像一個例子中,計算a+b的值是直接打印出來了,可是如今我不想在函數裏面打印出來了,我須要在函數外面使用這個結果繼續參與其餘運算該怎麼辦呢?這就須要定義帶返回值的函數了。

帶返回值的函數聲明定義格式:

def function(形參...): 函數執行的代碼 return 返回值

舉個例子:

def sum(a,b): result = a+b return result#result就是程序要返回出去的值
 res = sum(4,5) print(res)

運行結果爲:9

 

5、函數的類型

按照格式來劃分有四種類型,具體能夠根據使用場景合理的設計函數的類型。

  1. 無參無返回值函數
  2. 有參無返回值函數
  3. 無參有返回值函數
  4. 有參有返回值函數

 

6、函數的嵌套調用

一個函數裏面卻可使用其餘函數,這叫作函數的嵌套調用。

def printMenu(): print("-----------------------------------") print(" 一、查詢 ") print(" 二、修改 ") print(" 三、增長 ") print("-----------------------------------") def main(): #在main()中調用printMenu()函數
 printMenu() print("請輸入你的選擇:") main()

運行結果爲:

-----------------------------------
               1、查詢 2、修改 3、增長 ----------------------------------- 請輸入你的選擇:

 

7、局部變量和全局變量

說明:上面程序中a是全局變量,b是局部變量,因此代碼在第8行出錯,錯誤提示 NameError: name ‘b’ is not defined b變量沒有定義

  • 局部變量,就是在函數內部定義的變量
  • 不一樣的函數,能夠定義相同的名字的局部變量,可是各用個的不會產生影響
  • 局部變量的做用,爲了臨時保存數據須要在函數中定義變量來進行存儲,這就是它的做用
  • 全局變量既能在一個函數中使用,也能在其餘的函數中使用,

局部變量和全局變量重名,函數內使用的是局部變量的值,不影響外面的全局變量的值。

a = 1#全局變量
print("---1---: %d"%(a)) def test1(): b = 2#局部變量,只能在test1中使用
    print("---2---: %d"%(b)) def test2(): a = 3#局部變量,只能在test2中使用
    b = 4#局部變量,只能在test2中使用
    print("---3---: %d"%(a)) print("---4---: %d"%(b)) test1() test2() print("---5---: %d"%(a))

運行結果爲:

---1---: 1
---2---: 2
---3---: 3
---4---: 4
---5---: 1

上面的例子能夠看出,局部變量和全局變量重名,並不會修改全局變量的值,可是當咱們在一個函數中,就須要修改全局變量的值怎麼辦呢?只須要在函數內使用global修飾全局變量便可。

a = 1#全局變量
print("---1---: %d"%(a)) def test1(): b = 2
    print("---2---: %d"%(b)) def test2(): global a #在函數內部直接使用全局變量
    a = 3    #修改全局變量的值
    b = 4
    print("---3---: %d"%(a)) print("---4---: %d"%(b)) test1() test2() print("---5---: %d"%(a))

運行結果爲:

---1---: 1
---2---: 2
---3---: 3
---4---: 4
---5---: 3

第3次和第5次同樣說明全局變量在函數內部修改爲功。

 

8、缺省參數

  • 定義函數的時候能夠某個參數指定默認值,具備默認值的參數,就叫作缺省參數
  • 帶有默認值的參數必定要位於參數列表的最後面
def printInfo(name,age = 18): print("name = %s,age = %d"%(name,age)) printInfo("Se7eN_HOU") printInfo("Se7eN_HOU",28)

運行結果爲:

name = Se7eN_HOU,age = 18 name = Se7eN_HOU,age = 28

第一次age未傳值的時候,打印出來的是默認值18,第二次打印的是傳進來的值28.

 

9、不定長參數

使用場景:例如定義一個求兩個數之和的函數,而後在編寫一個求三個數之和的函數,也就是說,這樣的話每多一個數就要編寫一個函數,很麻煩,這裏就須要設計成爲一個具備不定長參數的函數。

一、帶一個 「*」 的參數

用一個星號 「 * 」修飾的參數是元組類型,在使用的時候能夠將傳遞多來的實際有多少個參數都放在元組裏面

def sum(*agrs): result = 0 for x in agrs: result += x print(result) sum(1) sum(1,2) sum(1,2,3)

運行結果爲:一、三、6

二、帶兩個「**」的不定長參數

用兩個星號「**」修飾的參數是字典類型,在使用的時候能夠以字典的形式傳遞多個值給到函數參與運算

 

運行結果爲:

 

 

10、匿名函數

lambda關鍵詞能建立小型匿名函數。這種函數得名於省略了用def聲明函數的標準步驟。lambda函數的語法只包含一個語句,以下:

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

實例以下:

sum = lambda arg1,agr2:arg1+agr2 #調用sum函數
print("sum :%d"%sum(10,20))

運行結果爲:30

  • Lambda函數能接收任何數量的參數但只能返回一個表達式的值
  • 匿名函數不能直接調用print,由於lambda須要一個表達式

使用場景

一、函數做爲參數傳遞

def fun(a,b,opt): print("a=%s"%(a)) print("b=%s"%(b)) print("result = %s"%opt(a,b)) fun(1,2,lambda x,y:x+y)

運行結果爲:

a=1 b=2 result = 3

二、做爲內置函數的參數

stus = [{"name":"zhangsan","age":18},{"name":"lis","age":19},{"name":"wangwu","age":17}]

按name排序

stus.sort(key = lambda x:x["name"]) print(stus)

運行結果爲:[{'name': 'lis', 'age': 19}, {'name': 'wangwu', 'age': 17}, {'name': 'zhangsan', 'age': 18}]

按age排序

stus.sort(key =lambda x:x["age"]) print(stus)

運行結果爲:[{'name': 'wangwu', 'age': 17}, {'name': 'zhangsan', 'age': 18}, {'name': 'lis', 'age': 19}]

相關文章
相關標籤/搜索