日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

内置函数、匿名函数,递归函数

發(fā)布時(shí)間:2025/3/15 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 内置函数、匿名函数,递归函数 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

內(nèi)置函數(shù):

https://www.processon.com/view/link/5adc6062e4b04721d63171eb?pw=3218

?

匿名函數(shù):lambda?

lambda 語法: lambda 參數(shù): 表達(dá)式

lambda存在意義就是對(duì)簡單函數(shù)的簡潔表示。

# 現(xiàn)有兩元組 (('a'),('b')), (('c'), ('d')),請(qǐng)用python中的匿名函數(shù)生成[{'a':'c'}, {'b':'d'}] # t1 = (('a'),('b')) # t2 = (('c'), ('d')) # print(list(zip(t1, t2))) # def func(t): # return {t[0]: t[1]} # m1 = map(func,zip(t1, t2) ) # print(list(m1)) # == # m1 = map(lambda t: {t[0]: t[1]}, zip(t1, t2)) # print(list(m1))

?

以下代碼的輸出是什么? 請(qǐng)給出答案并解釋 # def multipliers(): # return [lambda x: i*x for i in range(4)] """ def multipliers():retun [lambda x: i*x,lambda x: i*x,lambda x: i*x,lambda x: i*x] 每次循環(huán)i都會(huì)被重新賦值給,最終i == 3 """ # # print([m(2) for m in multipliers()]) # 結(jié)果: # [6, 6, 6, 6] ''' 執(zhí)行[lambda x: i*x,lambda x: i*x,lambda x: i*x,lambda x: i*x]這個(gè)四個(gè)函數(shù)x都==2,i== 3 '''# 想要產(chǎn)生 0, 2, 4, 6的話,可以修改為生成器表達(dá)式,因?yàn)樯善髂J(rèn)是取值的時(shí)候才會(huì)執(zhí)行的,所以i分別取值為[0,1,2,3] # def multipliers(): # return (lambda x: i*x for i in range(4)) # print([m(2) for m in multipliers()])

?

1.map函數(shù),我們使用map函數(shù)將會(huì)對(duì)列表中的所有元素進(jìn)行操作。map有兩個(gè)參數(shù)(函數(shù),列表),它會(huì)在內(nèi)部遍歷列表中的每一個(gè)元素,執(zhí)行傳遞過來的函數(shù)參數(shù)。在輸出到新列表中。

1 li = [11, 22, 33] 2 new_list = map(lambda a: a + 100, li)
輸出:[111, 122, 133]

當(dāng)然,map還可以完成多個(gè)數(shù)組的相加:

1 li = [11, 22, 33] 2 sl = [1, 2, 3] 3 new_list = map(lambda a, b: a + b, li, sl) 4 print new_list
輸出:[12, 24, 36]

2.reduce函數(shù),對(duì)于序列內(nèi)所有元素進(jìn)行累計(jì)操作:

1 lst = [11,22,33] 2 func2 = reduce(lambda arg1,arg2:arg1+arg2,lst) 3 print 'func2:',func2
輸出:func2: 66

3.filter函數(shù),他可以根據(jù)條件對(duì)數(shù)據(jù)進(jìn)行過濾:

1 li = [11, 22, 33] 2 new_list = filter(lambda arg: arg > 22, li)
3 print new_list
輸出:[33]

?

遞歸函數(shù)

我們先來講一個(gè)故事,講的什么呢?從前有座山,山里有座廟,廟里有個(gè)老和尚講故事,講的什么呢?

從前有座山,山里有座廟,廟里有個(gè)老和尚講故事,講的什么呢?

從前有座山,山里有座廟,廟里有個(gè)老和尚講故事,講的什么呢?

從前有座山,山里有座廟,廟里有個(gè)老和尚講故事,講的什么呢.....

.這個(gè)故事你們不喊停我能講一天!我們說,生活中的例子也能被寫成程序,剛剛這個(gè)故事,讓你們寫,你們?cè)趺磳懷?#xff1f;

while True:story = " 從前有個(gè)山,山里有座廟,廟里老和尚講故事,講的什么呢? " print(story)

函數(shù)的執(zhí)行方式:

def story():s = """從前有個(gè)山,山里有座廟,廟里老和尚講故事,講的什么呢?"""print(s)while True:story()

遞歸的方式實(shí)現(xiàn):

def story():s = """從前有個(gè)山,山里有座廟,廟里老和尚講故事,講的什么呢?"""print(s)story()story()

?

初識(shí)遞歸

# 遞歸調(diào)用: 在調(diào)用一個(gè)函數(shù)的過程中,直接或者間接又調(diào)用函數(shù)的本身,稱之為遞歸函數(shù)
# 遞歸必備的兩個(gè)階段1、遞推,2、回溯

  遞歸的最大深度——1000

# def func(n): # print('--->', n) # func(n+1) # func(0) #-->RecursionError: maximum recursion depth exceeded while calling a Python object# python默認(rèn)的最大遞歸層數(shù)是998層 測(cè)試最大遞歸深度 獲取與設(shè)置最大深度 import sys # print(sys.getrecursionlimit()) 獲取最大遞歸層數(shù) # sys.setrecursionlimit() 設(shè)置遞歸深度
"""
setrecursionlimit(n)

Set the maximum depth of the Python interpreter stack to n. This
limit prevents infinite recursion from causing an overflow of the C
stack and crashing Python. The highest possible limit is platform-
dependent.
""" ?

?

# def age(n): # if n == 1: # return 18 # return age(n-1) + 2 # print(age(5)) 遞歸實(shí)例1 # 遞歸打印list中子元素不包含list的元素 # l1 = [1, [2, [3, [4, [5, [6]]]]]] # def func(l): # for n in l: # if type(n) is list: # func(n) # else: # print(n) # # func(l1) 遞歸實(shí)例2
# 遞歸總結(jié)
# 1、必須有一個(gè)明確的結(jié)束條件
# 2、每次進(jìn)入更深一層遞歸時(shí),問題規(guī)模比上次遞歸應(yīng)所有減少
# 3、遞歸效率不高



遞歸函數(shù)與三級(jí)菜單
menu = {'北京': {'海淀': {'五道口': {'soho': {},'網(wǎng)易': {},'google': {}},'中關(guān)村': {'愛奇藝': {},'汽車之家': {},'youku': {},},'上地': {'百度': {},},},'昌平': {'沙河': {'老男孩': {},'北航': {},},'天通苑': {},'回龍觀': {},},'朝陽': {},'東城': {},},'上海': {'閔行': {"人民廣場(chǎng)": {'炸雞店': {}}},'閘北': {'火車戰(zhàn)': {'攜程': {}}},'浦東': {},},'山東': {}, }menu View Code

遞歸實(shí)現(xiàn)三級(jí)菜單

l = [menu] while l:for key in l[-1]:print(key)k = input('input>>').strip() # 北京if k in l[-1].keys() and l[-1][k]:l.append(l[-1][k])elif k == 'b':l.pop()elif k == 'q':break

?

?

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/zh-lei/p/8961657.html

總結(jié)

以上是生活随笔為你收集整理的内置函数、匿名函数,递归函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。