Python开发【第5节】【函数基础】
生活随笔
收集整理的這篇文章主要介紹了
Python开发【第5节】【函数基础】
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、函數
函數的本質就是功能的封裝。
函數的作用
- 提升代碼的重復利用率,避免重復開發相同代碼
- 提高程序開發效率
- 便于程序維護
2、函數定義
def 函數名(參數):"""函數文檔"""函數功能代碼...函數功能代碼...調用函數:函數名(參數)形參:聲明函數時()中的參數是形參形參只有在被調用時才分配內存單元,在調用結束時,即刻釋放所分配的內存單元。形參只在函數內部有效。函數調用結束返回主調用函數后則不能再使用該形參變量。實參:調用函數時()中的參數是實參,實參可以是常量、變量、表達式、函數等實參在函數調用時,必須有確定的值,以便把這些值傳送給形參。函數文檔:- 函數的作用
- 函數的參數介紹(個數,數據類型)
- 函數的返回值(數據和類型)
?
3、默認參數
def 函數名(形參=默認值,形參=默認值...):函數功能代碼...函數功能代碼......調用函數:函數名() # 調用函數時所有形參采用默認值操作函數名(實參,實參...) # 調用時形參使用實參的值而拋棄默認值4、關鍵參數
def 函數名(形參=默認值,形參=默認值...):函數功能代碼...函數功能代碼......調用函數:函數名(形參=實參,形參=實參...)5、收集參數
5.1、*args參數
def 函數名(*args):函數功能代碼...函數功能代碼......調用函數:函數名(實參,實參...) 沒有數量限制 *args 會把多傳入的參數變成一個元組形式5.2、**kwargs參數
def 函數名(**kwargs):函數功能代碼...函數功能代碼......調用函數: 函數名(形參=實參,形參=實參...) 沒有數量限制*kwargs會把多傳入的參數變成一個dict形式
6、函數返回值
return語句的特征:
- 具有return語句的函數稱為具有返回值的函數
- return可以為當前函數執行完畢返回一個結果,這樣的函數調用可以被接受
- return執行之后,函數則會終止,所有return之后的語句不會被執行
- 一個函數可以書寫多個return語句,但是一般會放入分支結構當中。
- 一個函數如果需要返回多個數據,需要借助復合數據類型(list,tuple,set,dict)來操作
- 不帶參數值的return語句返回None。
7、變量
全局變量:
在程序的一開始定義的變量稱為全局變量,全局變量作用域是整個程序
局部變量:
在子程序中定義的變量稱為局部變量,局部變量作用域是定義該變量的子程序
#!/usr/bin/python3 total = 0; # 這是一個全局變量 # 可寫函數說明 def sum( arg1, arg2 ):#返回2個參數的和."total = arg1 + arg2; # total在這里是局部變量.print ("函數內是局部變量 : ", total)return total;#調用sum函數 sum( 10, 20 ); print ("函數外是全局變量 : ", total)8、匿名函數(lambda)
lambda的主體是一個表達式,但可對有限的邏輯完成封裝。
lambda 函數擁有自己的命名空間,且不能訪問自己參數列表之外或全局命名空間里的參數。
res = map(lambda x:x**2,[1,5,7,4,8]) for i in res:print(i)執行結果: 1 25 49 16 649、遞歸函數
1.定義:如果一個函數在內部調用自身本身,這個函數就是遞歸函數。
2.特性:
- 必須有一個明確的結束條件
- ?每次進入更深一層遞歸時,問題規模相比上次遞歸都應有所減少
- 遞歸效率不高,遞歸層次過多會導致棧溢出(在計算機中,函數調用是通過棧(stack)這種數據結構實現的,每當進入一個函數調用,棧就會加一層棧幀,每當函數返回,棧就會減一層棧幀。由于棧的大小不是無限的,所以,遞歸調用的次數過多,會導致棧溢出)
二分法查找:
data = [1, 3, 6, 7, 9, 12, 14, 16, 17, 18, 20, 21, 22, 23, 30, 32, 33, 35]def binary_search(dataset,find_num):print(dataset)if len(dataset) >1:mid = int(len(dataset)/2)if dataset[mid] == find_num: #find itprint("找到數字",dataset[mid])elif dataset[mid] > find_num :# 找的數在mid左面print("\033[31;1m找的數在mid[%s]左面\033[0m" % dataset[mid])return binary_search(dataset[0:mid], find_num)else:# 找的數在mid右面print("\033[32;1m找的數在mid[%s]右面\033[0m" % dataset[mid])return binary_search(dataset[mid+1:],find_num)else:if dataset[0] == find_num: #find itprint("找到數字啦",dataset[0])else:print("沒的分了,要找的數字[%s]不在列表里" % find_num)binary_search(data,66)
?
轉載于:https://www.cnblogs.com/loser1949/p/9222441.html
總結
以上是生活随笔為你收集整理的Python开发【第5节】【函数基础】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java数组之binarySearch查
- 下一篇: Java的中BIO、NIO、AIO-1