目錄匿名函式
函式的巢狀呼叫:函式巢狀函式。函式的遞迴呼叫:它是一種特殊的巢狀呼叫,但是它在呼叫乙個函式過程中,有直接間接呼叫了自身。
def foo():
print('from foo')
foo()
foo() # 進入死迴圈
def bar():
print('from bar')
foo()
def foo():
print('from foo')
bar()
bar()
遞迴必須要有兩個明確的階段:
回溯:遞迴必須要有乙個明確的結束條件,在滿足該條件開始一層一層回溯。
遞迴的精髓在於通過不斷地重複逼近乙個最終的結果。
def age(n):
if == 1:
return 26
res = age(n-1)+2
return res
print(f"age(5):)
age(5):34
二分法的應用from random import randint
nums = [randint(1, 100) for i in range(100)]
nums = sorted(nums)
print(nums)
[1, 2, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 10, 11, 11, 11, 11, 12, 13, 13, 15, 16, 16, 20, 21, 21, 23, 24, 26, 26, 27, 28, 28, 31, 33, 33, 34, 35, 38, 38, 39, 40, 42, 43, 45, 45, 46, 46, 47, 47, 51, 52, 52, 53, 53, 55, 55, 56, 56, 57, 57, 57, 58, 59, 61, 62, 64, 66, 66, 67, 68, 69, 69, 71, 72, 72, 74, 74, 75, 76, 78, 78, 79, 79, 79, 79, 80, 82, 85, 88, 89, 90, 90, 91, 91, 91, 94, 99, 99, 100]
def search(search_num,nums):
mid_index=len(nums)/2
print(nums)
if not nums:
print("not exists")
return
if search_num>nums[mid_index]:
nums=nums[mid_index+1:]
search(search_num,nums)
elif search_num num:
lis = lis[:lis_len]
rec_find_num(num, lis)
elif binary_num < num: # 10 < 18
lis = lis[lis_len + 1:]
rec_find_num(num, lis)
else:
print('找到了')
lis = [i for i in range(100000000)] # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
start = time.time()
rec_find_num(4567899900, lis)
end = time.time()
print(end - start) # 1.1569085121154785
import time
lis = [i for i in range(100000000)]
def time_count(func):
start = time.time()
res = func(*args, **kwargs)
end = time.time()
print(end - start)
return res
@time_count
def find_num(num):
"""普通版本"""
for i in lis:
if i == num:
print('找到了')
break
else:
print('沒有被找到')
find_num(4567899900) # 2.293410062789917
salary_dict =
print(f"max(salary_dict): ")
def func(k):
return salary_dict[k]
print(f"max(salary_dict, key=func()): ")
print(
f"max(salary_dict, key=lambda name: salary_dict[name]): ")
max(salary_dict): tank
max(salary_dict, key=func()): jason
max(salary_dict, key=lambda name: salary_dict[name]): jason
sorted()、filter()、sorted()方法聯用。 匿名函式遞迴
lambda是匿名函式,因為沒有名字,也沒有關鍵字引用自身,因此遞迴的編碼就成了問題。一 最簡單有效的方案是 func f null 變數須先賦值才能使用 f n n 0?1 n f n 1 f 11 39916800 有人擔心f會被惡意修改,因為就是乙個委託變數,而且認為f是委託,而不是匿名函式自...
匿名函式遞迴
lambda是匿名函式,因為沒有名字,也沒有關鍵字引用自身,因此遞迴的編碼就成了問題。一 最簡單有效的方案是 func f null 變數須先賦值才能使用 f n n 0?1 n f n 1 f 11 39916800 有人擔心f會被惡意修改,因為就是乙個委託變數,而且認為f是委託,而不是匿名函式自...
scheme匿名函式遞迴
匿名函式與 有名函式 scheme中匿名函式使用 lambda 函式實現,格式為 lamdba 例如 lambda i i 3 接受乙個引數,返回它與3的和呼叫方法為 lambda i i 3 2 5而有名函式的定義方式和呼叫方式如下 define 格式 define function n 例子 n...