天天看點

函數

遞歸函數

1.什麼是遞歸函數
	遞歸:函數在運作過程中,直接或者間接的調用了自身
2.為什麼要有遞歸函數
	1.遞推
		一層層往下推導答案,每次遞歸之後複雜程度相較于上一次一定要有所下降
	2.回溯
		依據最後的結論往後推導出最初需要的答案
	遞歸一定要有結束條件!!!
官網:預設最大的遞歸深度為1000!!!
3.怎麼使用遞歸函數
	根據條件:已知目前一号比二号大兩歲,二号比三号大兩歲,三号比四号大兩歲,五号20歲,根據條件計算出一号多少歲。
	僞代碼:可能無法運作,但可以标表述邏輯
	age(1) = age(2) + 2
	age(2) = age(3) + 2
    age(3) = age(4) + 2
    age(4) = age(5) + 2 
    age(5) = 20
根據條件需要重複計算,嘗試可以使用for循環或while循環
	age = 20
	for i in range(4):
		age += 2
	print(age)
    28
# 在已知需要循環次數的情況下可以計算出
嘗試函數
	def count(n):  # 建立函數,設定形參
		if n == 1:  # 判斷等于一
			return  20  # 結束函數體代碼,傳回20
		return count(n - 1 ) +2  # 傳回這個函數體實參減1,的函數體+2
	print(count(5))  # 因為有五個人,是以五次
	28  # 最後遞歸4次每次傳回值+2,但沒有實際的傳回值
		# 當最後一步得到一個傳回值,20開始回溯+2.最後傳回28
4.另一種使用:
	l = [1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13,[14,]]]]]]]]]]]]]]
将清單中每個數字依次去除,隻能取出數字
	循環該清單,判斷是否是數字,數字列印
	是清單循環,判斷是否是數字,數字列印
	...
	def list(l):  # 建立函數,将清單填入
		for i in l:  # 循環清單,依次取值
			if type(i) is int:  # 判斷取出來的值是不是整形
				print(i)  # 是整形就列印
			else:  
				list(i)  # 不是整形就繼續走函數體代碼,将取出來的清單重新循環
    list(l)  # 調用函數
           

算法(二分法)

1.什麼是二分法
	解決問題的高效方法
2.為什麼要有二分法
	不知道
3.怎麼使用二分法
	'''二分算法使用場景:資料集必須有序'''
	l = [11, 23, 43, 57, 68, 76, 81, 99, 123, 321, 432, 567, 666, 712, 899, 999, 1111]
	利用二分算法判斷出321在不在這裡清單中,
	def list(a,b):  # a代表要查詢的元素321,b代表需要傳入這個清單。兩個參數
def list(a,b):  # a代表要查詢的元素321,b代表需要傳入這個清單。兩個參數
	if len(b) == 0:  #判斷判斷清單是不是等于0,
		print('沒有')# 等于0還沒有找到就是沒有
		return    # 結束
	c = len(b)//2  # 計算出清單的整體長度并整除2擷取一半獲得索引
	if  a > b[c]:  # 判斷a是不是大于b根據索引c取出來的值
		print('大于')  
		d = b[c+1:]  # 大于就将索引位置後面的清單切出來,因為顧頭不顧尾取出來的值可以不用比較是以加1
		list(a,d)  # 在調用函數将a填入,再将取出來的清單d填入
	elif a < b[c]:  # 判斷a是不是大于b根據索引c取出來的值
		print('小于')
		e = b[:c]  #如果a小于取出來的值就将清單左邊切出來
		list(a,e)  # 在調用函數将a填入,再将取出來的清單e填入
	else:  # 不大于不小于就是等于,是以就直接列印出來,并return
		print('找到',a)
		return
list(33,l)
           

清單表達式

變量名 = [i  for i in 清單]
1.什麼是清單生成式
	不知道
2.為什麼要有清單生成式
	不知道
3.怎麼使用清單生成式
	l = [11, 23, 43, 57, 68, 76, 81, 99, 123, 321, 432, 567, 666, 712, 899, 999, 1111]
    res = [i  for i in l]
    [11, 23, 43, 57, 68, 76, 81, 99, 123, 321, 432, 567, 666, 712, 899, 999, 1111]
	将l裡面的元素通過for循環取出指派給i,在添加到現有res的清單中
    
	res = ['%s_DSB' % i for i in l]
	['11_DSB', '23_DSB', '43_DSB', '57_DSB', '68_DSB', '76_DSB']
	利用%s可以給元清單中的元素添加統一字尾
           

字典生成式

清單1
清單2
空字典
for i in range(len(清單1))
	空字典[清單1[i]] = 清單2[i]
1.什麼是字典生成式
2.為什麼要有字典生成式
3.怎麼使用字典生成式
	l1 = ['name', 'age', 'hobby']
	l2 = ['jason', 18, 'read']
	new_dict = {}
	for i in range(len(l1)):  # 計算清單長度,表示循環次數
		new_dict[l1[i]] = l2[i]  #将需要當K值的清單當做K
	print(new_dict)

           

三元表達式

左邊 if 判斷是否成立 else 右邊
成立就左邊,不成立就右邊
1.什麼是三元表達式
	條件成立采用if前面的值 if 條件 else 條件不成立采用else後面的值
三元表達式盡量不要嵌套使用
2.為什麼要有三元表達式
	當功能需求僅僅是二選一的情況下 那麼推薦使用三元表達式
3.怎麼使用三元表達式
	is_free = input('電影是否收費(y/n)>>>:').strip()
	if is_free == 'y':
		print('收費')
	else:
		print('免費')
	print('收費' if is_free == 'y' else '免費')
           

匿名函數

1.什麼是匿名函數
	沒有名字的函數與函數有相同的作用域,但是匿名意味着引用計數為0,使用一次就釋放,除非讓其有名字
	lambda 形參:傳回值
2.為什麼要有匿名函數
	
3.怎麼使用匿名函數
	print(lambda x:x**2)
           
上一篇: 裝飾器
下一篇: Vscode