定義:函式就是乙個被封裝好的具有特定功能的**段。
特點:可以重複使用(復用性)。
自定義函式
1.普通函式
2.匿名函式
def 函式名(
[引數]):
#定義函式
'''注釋'''
函式體函式名(
[實參]
)#執行函式
例如:
def
printlnfo()
:print
('天生我才,必有用』)
print
('人生苦短,我用python『)
printlnfo(
)#執行函式
引數作為函式的輸人,引數又分為形參,實參
形參:本質上乙個區域性變數;由於接收函式,怪不得資料,他是定義函式時,定義的。
實參:在函式呼叫執行時,傳遞的資料。
返回值:將函式中的區域性變數傳遞到函式外部
return返回值
def
add(a,b)
:return a+b #返回a+b的值
c = add(1,
2)#c = 3
注釋:return語句一旦執行,函式就會終止,其後的其他語句都不會執行。
變數作用域:變數起作用的範圍。
區域性變數:函式內部定義的變數包括形參,只能在函式內部被呼叫。
全域性變數:在整個函式中都可以被呼叫的變數,一般直接定義在函式的外部,或者用global關鍵字在函式內部定義。(除非被刪除掉否則一直存活到指令碼執行結束)
注:在函式使用全域性變數時,可以呼叫全域性變數的值,不能直接修改全域性變數(值如果是可變型別,值可以改變)
位置引數:形參的負值時和形參定義的順序一致。
命名引數:可以不按照順序複製,複製時形參等於失碳。
預設值引數:定義形參時
可變長度引數:在普通引數前加*,
例: *args,會將n個引數放到乙個元組中。
可變長度的命名引數:在普通引數前加**,
例:**kwarg,以字典的方式接收資料。
匿名函式:lambda 表示式
lambda 引數1,引數2…:返回值
例如:
lambda x:x%2!=
0
遞迴函式:程式呼叫自身的程式設計技巧稱為遞迴(recursion)。
#使用遞迴方法實現5!
def
func
(n):
if n ==
1or n ==0:
return
1else
:return n * func(n-1)
print
(func(5)
)
遞迴函式優缺點遞迴函式示例:要求輸入乙個數字表示是第幾個數字,正確輸出第n個斐波那契數
def
fun(n)
:if n <0:
print
('輸入有誤!』)
elif n ==
1or n ==2:
return
1else
:return fun(n-1)
+ fun(n-2)
print
(fun(6)
)
生成器函式:(generator)
我們之前學過元組生成器.
(i for i in range(10))
生成器就是包含yield關鍵字的函式。本質上來說,關鍵字yield是乙個語法糖,內部實現支援了迭代器協議。同時,yield內部是乙個狀態機,維護著掛起和繼續的狀態。(節省記憶體空間)
例:生成器–斐波那契
def()
: a,b =1,
1while
true
:yield a #暫時執行,需要時再產生乙個新元素
a,b = b,a+b #繼續生成新元素
a = f(
)for i in
range(10
):print
(next
(a),end=
'')
由於水平限制,此次的學習筆記到此次結束,有什麼不對的希望大家指導!
遞迴與分治策略
1 全排列問題 設r n 是要進行排列的n個元素。集合x中元素的全排列記為perm x 求r n 的全排列perm r n 用遞迴演算法求解 1 找出遞迴子結構性質 即原問題的解包含了子問題的解,且子問題的描述與原問題相同。這就可以用子問題的解來構造原問題的解。設r i r n 這是乙個子問題。設 ...
遞迴與分治策略
1.遞迴 直接或間接地呼叫自身的演算法稱為遞迴演算法。用函式自身給出定義的函式稱為遞迴函式。1 階乘函式 include using namespace std int main int factorial int n 2 fibonacci數列 include using namespace st...
分治策略與遞迴
先看 資料結構與演算法分析 中對分治策略的解釋 把問題分成兩個大致相等的子問題,然後再遞迴地對他們進行求解,這是 分 治 階段將兩個子問題的解合併到一起並可能再做些少量的附加工作,最後得到整個問題的解。由定義可以看出,分治需要進行兩步操作 分 將問題恰當的劃分為需要迭代處理的兩個子問題,治 將兩個子...