python中for循環(huán)變量作用域及用法詳解
在講這個(gè)話(huà)題前,首先我們來(lái)看一道題:
代碼1:
def foo(): return [lambda x: x**i for i in range(1,5,2)] print([f(3) for f in foo()])
伙伴們,你們認(rèn)為這里產(chǎn)生的結(jié)果是什么呢?我們?cè)賮?lái)看下這題的變體:
代碼:2
def foo(): functions=[] for i in range(1,5,2): def inside_fun(x): return x ** i functions.append(inside_fun) return functions print([f(3) for f in foo()])
這兩題的結(jié)果是一樣的:都是[27,27]。我相信大部分的伙伴也都會(huì)有個(gè)疑問(wèn),為什么不是[3,27]呢?
這里的就是我們今天要說(shuō)的for循環(huán)中的變量作用域,因?yàn)閒or循環(huán)不是一個(gè)函數(shù)體,所以for循環(huán)中的變量i的作用域其實(shí)和for循環(huán)同級(jí),即類(lèi)似下面代碼
代碼3:
def foo(): i=None for i in range(1,5,2): pass print(i) foo() # 結(jié)果為3,即循環(huán)結(jié)束i的最終值
另外因?yàn)閜ython運(yùn)行到代碼行時(shí)才會(huì)去查找該變量的作用域,所以代碼1和代碼2中的i值在調(diào)用的時(shí)候?yàn)閒or循環(huán)最終值3,所以結(jié)果都是執(zhí)行x**3。
ps:下面看下python中for循環(huán)的用法
Python for循環(huán)可以遍歷任何序列的項(xiàng)目,如一個(gè)列表或者一個(gè)字符串。
語(yǔ)法模式:for iterating_var in sequence:
in 字面意思,從某個(gè)集合(列表等)里順次取值
#遍歷數(shù)字序列 the_count=[1,2,3,4,5] for number in the_count: print(f"This is count {number}") 輸出結(jié)果: This is count 1 This is count 2 This is count 3 This is count 4 This is count 5 #遍歷一維字符串?dāng)?shù)組 fruits=['apples','oranges','dimes','quarters'] for fruit in fruits: print(f"A fruit of type:{fruit}") 輸出結(jié)果為: A fruit of type:apples A fruit of type:oranges A fruit of type:dimes A fruit of type:quarters #遍歷字符串 list_python='python' for j in list_python: print(f"{j}") 輸出結(jié)果為: p y t h o n #通過(guò)序列索引迭代 elements=[]#列表為空 for i in range(0,6):#012345 print(f"Adding {i} to the list.") elements.append(i)#得到elements=[0,1,2,3,4,5] #len(elements)長(zhǎng)為6,range(len(elements))==range(6) for i in range(len(elements)): print(f"Elemnet was:{i}") 輸出結(jié)果為: Adding 0 to the list. Adding 1 to the list. Adding 2 to the list. Adding 3 to the list. Adding 4 to the list. Adding 5 to the list. Elemnet was:0 Elemnet was:1 Elemnet was:2 Elemnet was:3 Elemnet was:4 Elemnet was:5
總結(jié)
以上所述是小編給大家介紹的python中for循環(huán)變量作用域及用法詳解,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!
相關(guān)文章
Django中的WebSocket實(shí)時(shí)通信的實(shí)現(xiàn)小結(jié)
在Django中,使用WebSocket可以實(shí)現(xiàn)實(shí)時(shí)通信,例如聊天應(yīng)用、實(shí)時(shí)更新等,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05對(duì)python3中的RE(正則表達(dá)式)-詳細(xì)總結(jié)
今天小編就為大家分享一篇對(duì)python3中的RE(正則表達(dá)式)-詳細(xì)總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07基于Python代碼實(shí)現(xiàn)Apriori?關(guān)聯(lián)規(guī)則算法
這篇文章主要介紹了基于Python代碼實(shí)現(xiàn)Apriori?關(guān)聯(lián)規(guī)則算法,本文通過(guò)應(yīng)用場(chǎng)景舉例,結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-03-03pycharm設(shè)置鼠標(biāo)懸停查看方法設(shè)置
在本文里小編給大家分享的是關(guān)于pycharm鼠標(biāo)懸停查看方法說(shuō)明怎么設(shè)置的相關(guān)知識(shí)點(diǎn),需要的朋友們參考學(xué)習(xí)下。2019-07-07Python實(shí)現(xiàn)批量向PDF文件添加中文水印
本文將通過(guò)設(shè)置批量PDF文件所在的路徑及需要添加的水印名稱(chēng),從而實(shí)現(xiàn)批量添加PDF水印的效果。感興趣的小伙伴可以跟隨小編一起動(dòng)手試一試2022-02-02請(qǐng)不要重復(fù)犯我在學(xué)習(xí)Python和Linux系統(tǒng)上的錯(cuò)誤
本人已經(jīng)在運(yùn)維行業(yè)工作了將近十年,我最早接觸Linux是在大二的樣子,那時(shí)候只追求易懂,所以就選擇了Ubuntu作為學(xué)習(xí)、使用的對(duì)象,它簡(jiǎn)單、易用、好操作、界面絢麗,對(duì)于想接觸Linux的新手來(lái)說(shuō)是非常不錯(cuò)的2016-12-12詳解Python設(shè)計(jì)模式編程中觀察者模式與策略模式的運(yùn)用
這篇文章主要介紹了Python設(shè)計(jì)模式編程中觀察者模式與策略模式的運(yùn)用,觀察者模式和策略模式都可以歸類(lèi)為結(jié)構(gòu)型的設(shè)計(jì)模式,需要的朋友可以參考下2016-03-03