接收乙個或多個函式作為輸入
return返回另乙個函式
def add(x, y, f):
return f(x) + f(y)
def get_abs(n):
return int(str(n).strip('-'))
print(add(5, -10, get_abs))
def calc(n):
print(n)
n = int(n/2)
if n > 0:
calc(n)
print(n)
calc(100)
遞迴二分查詢
2個引數
a = [1,3,4,6,7,8,9,11,15,17,19,21,22,25,29,33,38,69,107]
def split_find(n, a):
if len(a) == 1:
if a[0] == n:
print('%s is in the list' % n)
else:
print('not exists')
mid_index = len(a) // 2
mid_value = a[int(len(a) // 2)]
if n == mid_value:
print('%s is in the list' % n)
return
if n > mid_value:
# print('>')
a = a[mid_index:]
if n < mid_value:
# print('<')
a = a[:mid_index]
split_find(n, a)
split_find(33, a)
print(a.index(33))
4個引數:
a = [1,3,4,6,7,8,9,11,15,17,19,21,22,25,29,33,38,69,107]
def binary_search(start,end,n,d_list):
"""每次把列表規模折半,查詢乙個資料最多隻需要2的n次方 < len(d_list),是2的多少次方,就是最多查多少次。
假如列表長度為200,那最多隻需查詢8次(2**8次方)
:param start: 查詢的起始位置
:param end: 查詢的結束位置
:param n: 要查詢的值
:param d_list: 要找的列表
:return:
"""if start < end: # 查詢的範圍[start:end]依然大於0個
mid = (start + end)//2 # 找到中間位置
if d_list[mid] > n: # 如果中間的這個值比要找的n大,代表要往d_list[mid]左邊找
print("go left",start,mid,end,"--",d_list[start],d_list[mid],d_list[end-1])
binary_search(start,mid,n,d_list)
elif d_list[mid] < n : # 要往右邊找,繼續折半
print("go right..",start,mid,end,"--",d_list[start],d_list[mid],d_list[end-1])
binary_search(mid+1,end,n,d_list)
else: # 找到了
print("find:",d_list[mid],mid)
else: # 假設start=9,end=9, 那d_list[9:9]已經取不到值了,在這種情況下,只能說明,要找的這個值不在這個列表裡
print("cannot find %s in this data list" % n)
binary_search(0, len(a), 22, a)
Python基礎筆記 函式2
1.定義 函式自己呼叫自己 2.形成條件 1 函式自己呼叫自己 2 必須有乙個終止條件 已知室內每人相差三歲,第乙個人18歲,求第6個人的年齡。定義函式 deftwo age n 6 判斷是否為第乙個人 if n 1 return 18 求第n個人的年齡,只需要n 1這人的年齡 2 再次呼叫函式tw...
python基礎筆記 6
物件導向 python是動態語言,可以給物件動態新增屬性和方法。魔法方法 str 物件的字串形式,print函式列印物件時,物件的 str 函式被呼叫,其返還的內容被列印。私有屬性和私有方法 以 開頭,在類外部不能直接使用 del 方法 物件被釋放 引用計數為0 時python直譯器自動呼叫 sys...
筆記 python基礎之內置函式2
reverse 反轉 reverse 反轉的迭代器,能保留原序列 l 1,2,3,4,5 l.reverse print l l 1,2,3,4,5 l2 reversed l print l2 保留原列表,返回乙個反向的迭代器 輸出 5,4,3,2,1 slice 切片規則 l 1,2,23,21...