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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python递归迭代_Python入门基础知识点(python迭代器和递归)

發(fā)布時間:2023/12/10 python 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python递归迭代_Python入门基础知识点(python迭代器和递归) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

函數(shù)名的使用:

函數(shù)名是一個變量, 但它是一個特殊的變量, 與括號配合可以執(zhí)行函數(shù)的變量

函數(shù)名的內(nèi)存地址:

deffunc():pass

print(func) #函數(shù)的內(nèi)存地址

結(jié)果:

函數(shù)名可以賦值給其他變量:

deffunc():print(1)

a=func

a()

func()#函數(shù)名可以當(dāng)做值賦值給變量

結(jié)果:1

1

函數(shù)名可以當(dāng)做容器類的元素:

deffunc():print(1)deffunc2():print(2)

li=[func,func2]print(li) #函數(shù)名可以當(dāng)做元素放到容器里

結(jié)果:[, ](打印的是函數(shù)的內(nèi)存地址,列表里的函數(shù)可以加括號,打印的是函數(shù)執(zhí)行的結(jié)果,及列表的返回的None)deffunc():print(1)deffunc2():print(2)

li=[func(),func2()]print(li) #函數(shù)名可以當(dāng)做元素放到容器里

結(jié)果:1

2[None, None]

函數(shù)名可以當(dāng)做函數(shù)的參數(shù):

deffunc():print("吃了么")deffunc2(fn):print("我是1")

fn()#執(zhí)行傳遞過來的fn

print("我是2")

func2(func)#把函數(shù)func當(dāng)成參數(shù)傳遞給func2的參數(shù)fn.

結(jié)果: 我是1

吃了么

我是2

函數(shù)名可以作為函數(shù)的返回值

deffunc_1():print("這里是函數(shù)1")deffunc_2():print("這里是函數(shù)2")print("這里是函數(shù)3")returnfunc_2

fn=func_1()#執(zhí)行函數(shù)1. 函數(shù)1返回的是函數(shù)2, 這時fn指向的就是上面函數(shù)2

fn() #執(zhí)行func_2函數(shù)

結(jié)果:

這里是函數(shù)1

這里是函數(shù)3

這里是函數(shù)2

deffunc():defaa():print(2)returnNonereturn aa() #return None#func() # func() == None

print(func())

結(jié)果:2None

例題:

li =[]for i in range(3): #for循環(huán)三次,三次最終結(jié)果i=2

def func(x): #定義函數(shù),形參為x

print(x*i) #打印形參與i(2)相乘的結(jié)果

li.append(func) #將func依此添加到li列表當(dāng)中,循環(huán)三次,添加三個,

#此時,列表里的func雖然外表相同,定義的函數(shù)相同,但內(nèi)存地址不一樣,存在三個內(nèi)存地址

for func in li: #將列表里的函數(shù)循環(huán)出來

func(2) #依此執(zhí)行func函數(shù),實參數(shù)為2

結(jié)果:4

4

4此時我要想將結(jié)果打印為0,2,4,只需定義一個數(shù)即可

li=[]for i in range(3): #for循環(huán)三次,循環(huán)為 i =(0,1,2)

def func(x,y=i): #定義函數(shù),形參為x,y=循環(huán)的 i 值

print(x*y) #打印形參與y(0,1,2)相乘的結(jié)果

li.append(func) #將func依此添加到li列表當(dāng)中,循環(huán)三次,添加三個,

#此時,列表里的func雖然外表相同,定義的函數(shù)相同,但內(nèi)存地址不一樣,存在三個內(nèi)存地址

for func in li: #將列表里的函數(shù)循環(huán)出來

func(2) #依此執(zhí)行func函數(shù),實參數(shù)為2

閉包

什么是閉包? 閉包就是內(nèi)層函數(shù), 對外層函數(shù)(非全局)的變量的引用. 叫閉包

# 1.一個嵌套函數(shù)

# 2.在嵌套函數(shù)的內(nèi)部函數(shù)使用外部(非全局的變量)

# 滿足以上兩條就是閉包

defwrapper():

a= 10

definner():print(a)print(inner.__closure__) #不是None 就是閉包

inner()

wrapper()

結(jié)果:

(,)10

將里邊的函數(shù)名當(dāng)做參數(shù)返回給調(diào)用者

defouter():

name= "alex"

#內(nèi)部函數(shù)

definner():print(name)returninner

fn= outer() #訪問外部函數(shù), 獲取到內(nèi)部函數(shù)的函數(shù)地址

fn() #訪問內(nèi)部函數(shù)

結(jié)果:alex

例:

money = 10

#全局里存放會有污染和不安全的現(xiàn)象

defwrapper():

money= 10

definner(num):global money #從全局調(diào)用money

money +=numprint(money)returninner

wrapper()(100) #第二個括號是return的返回值inner的執(zhí)行,實參為100

# python中閉包,會進(jìn)行內(nèi)存駐留, 普通函數(shù)執(zhí)行完后就銷毀了

# 全局里存放會有污染和不安全的現(xiàn)象

# 面試必問,裝飾器 -- 裝飾器的本質(zhì)就是閉包

# 閉包有個弊端:會出現(xiàn)內(nèi)存泄漏

迭代器

可迭代對象有哪些:str list tuple dic set

可迭代對象:可以被for的就是可迭代對象

# Python 協(xié)議

# 具有.__iter__方法的就是可迭代對象

# a = 對象.__iter__ # 創(chuàng)建一個迭代器

# 具有__iter__和__next__就是一個迭代器

可以for循環(huán)的就有__iter__方法,包括range

.這里的__iter__是幫助我們獲取到對象的迭代器.我們使用迭代器中的__next__()來獲取到一個迭代器的元素

li = [1,2,3]

a= li.__iter__()print(a.__next__())print(a.__next__()) #一個一個取

print(a.__next__())

結(jié)果:1

2

3

我們使用while循環(huán)和迭代器來模擬for循環(huán): 必須要會:

lst = [6,5,4]

l= lst.__iter__()while 1:try:

i= l.__next__()print(i)except StopIteration #當(dāng)遇到報錯的時候,就break退出

break

# 迭代器特性:

# 惰性機(jī)制

# 不能從下向上走

# 一次性的,用完就沒了

小總結(jié):

Iterable: 可迭代對象. 內(nèi)部包含__iter__()函數(shù)

? Iterator: 迭代器. 內(nèi)部包含__iter__() 同時包含__next__().

迭代器的特點:

? 1. 節(jié)省內(nèi)存.

? 2. 惰性機(jī)制

? 3. 不能反復(fù), 只能向下執(zhí)行.

我們可以把要迭代的內(nèi)容當(dāng)成子彈. 然后呢. 獲取到迭代器__iter__(), 就把子彈都裝在彈夾中. 然后發(fā)射就是__next__()把每一個子彈(元素)打出來. 也就是說, for循環(huán)的時候.一開始的 時候是__iter__()來獲取迭代器. 后面每次獲取元素都是通過__next__()來完成的. 當(dāng)程序遇到 StopIteration將結(jié)束循環(huán).

遞歸:

# 1. 自己玩自己 (自己調(diào)用自己本身)

# 2. 玩的有限制 (有明確結(jié)束條件)

count =0deffunc():globalcount

count+= 1

print(count)if count == 4: #當(dāng)count=4時,返回

returnfunc()#產(chǎn)生遞歸現(xiàn)象

func()

打印1到100

deffunc(n):

n+=1

print(n)if n == 100:returnfunc(n)

func(0)

例題:

deffunc(age):print(age) #最后打印4

deffunc1(age):print(age) #3

func(age+1) #執(zhí)行func,實參數(shù)位4

deffunc2(age):print(age) #2

func1(age+1) #執(zhí)行func1,實參數(shù)位3

func2(2)

打印結(jié)果:2

3

4

作業(yè):

1.寫函數(shù),傳入n個數(shù),返回字典{‘max’:最大值,’min’:最小值}

例如:min_max(2,5,7,8,4) 返回:{‘max’:8,’min’:2}(此題用到max(),min()內(nèi)置函數(shù))2.寫函數(shù),傳入一個參數(shù)n,返回n的階乘

例如:cal(7) 計算7*6*5*4*3*2*1

3.寫函數(shù),返回一個撲克牌列表,里面有52項,每一項是一個元組

例如:[(‘紅心’,2),(‘草花’,2), …(‘黑桃’,‘A’)]4. 相關(guān)面試題(先從紙上寫好答案,然后在運行):def calc(a,b,c,d=1,e=2):return (a+b)*(c-d)+e

請分別寫出下列標(biāo)號代碼的輸出結(jié)果,如果出錯請寫出Error。print(calc(1,2,3,4,5))_____

print(calc(1,2))____

print(calc(e=4,c=5,a=2,b=3))___

print(calc(1,2,3))_____

print(calc(1,2,3,e=4))____

print(calc(1,2,3,d=5,4))_____下面代碼打印的結(jié)果分別是_________,________,________.def extendList(val,list=[]):

list.append(val)returnlist

list1= extendList(10)

list2= extendList(123,[])

list3= extendList('a')print('list1=%s'%list1)print('list2=%s'%list2)print('list3=%s'%list3)5.寫代碼完成99乘法表.(升級題)1 * 1 = 1

2 * 1 = 2 2 * 2 = 4

3 * 1 = 3 3 * 2 = 6 3 * 3 = 9......9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81

總結(jié)

以上是生活随笔為你收集整理的python递归迭代_Python入门基础知识点(python迭代器和递归)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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