python基础-函数(9)
一、函數的介紹
如果在開發程序時,需要某塊代碼多次,但是為了提高編寫的效率以及代碼的重用,所以把具有獨立功能的代碼塊組織為一個小模塊,這就是函數
函數的語法格式:
def 函數名():函數的功能代碼注意:python不像其他編程語言使用{}控制作用域,python嚴格使用縮進控制作用域,所以在python中使用,函數要嚴格的控制縮進。
?
二、函數的調用
定義了函數之后,就相當于有了一個具有某些功能的代碼,想要讓這些代碼能夠執行,需要調用它,調用函數很簡單的,
通過??函數名()? 即可完成調用
def printMenu():print("-----------------------------------")print(" 1、查詢 ")print(" 2、修改 ")print(" 3、增加 ")print("-----------------------------------")#函數的調用 printMenu() #函數可以重復調用 printMenu()運行結果為:
-----------------------------------1、查詢 2、修改 3、增加 ----------------------------------- -----------------------------------1、查詢 2、修改 3、增加 -----------------------------------說明:
?
三、帶有參數的函數
參數分為實參和形參兩種形式
- 實參 – 在調用函數的時候給函數參與運算的真實數據
- 形參 – 在函數聲明的時候用來給真實數據做占位使用的虛擬數據
帶參數函數的定義格式:
def 函數名(形參1,形參2,形參3....):要執行的代碼舉個例子:
#定義一個具有兩個形式參數的函數 def sum(a,b):#a,b就是形參result = a+bprint(result)#sum()函數的調用 sum(4,5)#4,5就是真實參數運行結果為:9
帶參數函數的精髓就是,可以靈活的處理數據的運算。
?
四、函數的返回值
所謂“返回值”,就是程序中函數完成一件事情后,最后給調用者的結果,就像一個例子中,計算a+b的值是直接打印出來了,但是現在我不想在函數里面打印出來了,我需要在函數外面使用這個結果繼續參與其他運算該怎么辦呢?這就需要定義帶返回值的函數了。
帶返回值的函數聲明定義格式:
def function(形參...):函數執行的代碼return 返回值舉個例子:
def sum(a,b):result = a+breturn result#result就是程序要返回出去的值 res = sum(4,5) print(res)運行結果為:9
?
五、函數的類型
按照格式來劃分有四種類型,具體可以根據使用場景合理的設計函數的類型。
?
六、函數的嵌套調用
一個函數里面卻可以使用其他函數,這叫做函數的嵌套調用。
def printMenu():print("-----------------------------------")print(" 1、查詢 ")print(" 2、修改 ")print(" 3、增加 ")print("-----------------------------------")def main():#在main()中調用printMenu()函數 printMenu()print("請輸入你的選擇:")main()運行結果為:
-----------------------------------1、查詢 2、修改 3、增加 ----------------------------------- 請輸入你的選擇:?
七、局部變量和全局變量
說明:上面程序中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 = 2print("---2---: %d"%(b))def test2():global a #在函數內部直接使用全局變量a = 3 #修改全局變量的值b = 4print("---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次一樣說明全局變量在函數內部修改成功。
?
八、缺省參數
- 定義函數的時候可以某個參數指定默認值,具有默認值的參數,就叫做缺省參數
- 帶有默認值的參數一定要位于參數列表的最后面
運行結果為:
name = Se7eN_HOU,age = 18 name = Se7eN_HOU,age = 28第一次age未傳值的時候,打印出來的是默認值18,第二次打印的是傳進來的值28.
?
九、不定長參數
使用場景:例如定義一個求兩個數之和的函數,然后在編寫一個求三個數之和的函數,也就是說,這樣的話每多一個數就要編寫一個函數,很麻煩,這里就需要設計成為一個具有不定長參數的函數。
1、帶一個?“*”?的參數
用一個星號?“ * ”修飾的參數是元組類型,在使用的時候可以將傳遞多來的實際有多少個參數都放在元組里面。
def sum(*agrs):result = 0for x in agrs:result += xprint(result)sum(1) sum(1,2) sum(1,2,3)運行結果為:1、3、6
2、帶兩個“**”的不定長參數
用兩個星號“**”修飾的參數是字典類型,在使用的時候可以以字典的形式傳遞多個值給到函數參與運算
?
運行結果為:
?
?
十、匿名函數
用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需要一個表達式
使用場景
1、函數作為參數傳遞
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 = 32、作為內置函數的參數
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}]
轉載于:https://www.cnblogs.com/Se7eN-HOU/p/10693752.html
總結
以上是生活随笔為你收集整理的python基础-函数(9)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Smali文件添加try/catch语句
- 下一篇: 阅读笔记一——java高并发的性能优化