함수 재귀, 익명 함수, 내장 함수

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()

의미있는 재귀는 특정 조건에서 끝날 수 있어야합니다 재귀
의 과정 두 단계로 나누어 져야합니다 :
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)

두, 익명 기능

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,))


필터 # (필터) 를 이해하는 세 가지 내장 기능

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)

추천

출처blog.51cto.com/15129993/2678373