1.関数の再帰1.関数の再帰呼び出しのネストされた呼び出しの特別な形式
とは
、関数
を呼び出すプロセスでそれ自体を呼び出すことを具体的に指します。これは関数の再帰呼び出しと呼ばれます。
def f1(): #在调用一个函数过程中直接调用自己
print('from f1')
f1()
2.なぜ関数再帰を使用するのですか?
特定の状況で使用する方が便利で簡単になります
import sys
print(sys.getrecursionlimit()) #查看递归层级
sys.setrecursionlimit(2000) #改变递归层级
def f1(): #在调用一个函数过程中间接调用自己
print('fi')
f2()
def f2():
print('f2')
f1()
f1()
意味のある再帰は、特定の条件下で終了できる必要があります。
再帰のプロセスは
、次の2つの段階に分割する必要があります。1。バックトラック:次のレベルへの呼び出し
2.再帰:次のレベルに戻る
例
def age(n):
if n == 1:
return 18
return age(n-1) + 10
res = age(5)
print(res)
再帰はどのようなシナリオで便利ですか?
再帰は、関数を使用してループの
例1を実装することです。
nums = [1, [2, [3, [4, [5, [6, [7, [8, ]]]]]]]]
def func(nums):
for item in nums:
if type(item) is list:
func(item)
else:
print(item)
func([1, [2, [3, [4, [5, [6, [7, [8, ]]]]]]]])
例2リストにない番号を見つける
nums = [-3, 1, 5, 7, 9, 11, 13, 18, 22, 38, 78, 98]
方法一(效率不高)
for num in nums:
if num == find_num:
print('find it')
break
方法二(二分法,一种算法高效解决问题方法)
def search(find_num, nums):
# print(nums)
if len(nums) == 0:
print('not exists')
return
mid_index = len(nums) // 2
if find_num > nums[mid_index]:
# in the right
new_nums = nums[mid_index + 1:]
search(find_num, new_nums)
elif find_num < nums[mid_index]:
# in the left
new_nums = nums[:mid_index]
search(find_num, new_nums)
else:
print('find it')
search(23, nums)
2つの無名関数
res=(lambda x,y:x+y)(4,5)
print(res)
一般的な使用法は、
たとえば他の機能と一緒に使用することです(辞書で最も給与の高い人を見つけます)
salaries = {
'axx':1000000,
'zxx':3000,
'egon':4000,
}
#介绍max print(max([1,2,3,4])) #max 传可迭代对象
def func(k): #只用一次可以用lambda代替
return salaries[k]
print(max(salaries,key=func)) #用key可以改变比较依据
print(max(salaries,key=lambda k:salaries[k]))
print(min(salaries,key=lambda k:salaries[k]))
print(sorted(salaries,key=lambda k:salaries[k]))
print(sorted(salaries,))
フィルタ#(フィルタ)を理解するための3つの組み込み関数
names = ['egon_nb',"lxx_sb","hxx_sb"]
res =(name for name in names if name.endswith('sb'))
print(res)
res = filter(lambda name:name.endswith('sb'),names)
print(res)
print(list(res))
地図#映出
names = ['egon','lxx','zxx']
res = [name + "vip" for name in names]
print(res)
res = map(lambda name:name + "vip",names)
print(res)
print(list(res))
削減#モジュールは次のように要約されます
from functools import reduce
reduce(lambda x,y:x+y,[1,2,3,4,5,6],100)
res = reduce(lambda x,y:x+y,["a","b","c"])
print(res)