python_列表_迭代_函數(shù)_閉包

列表生成器:
1、生成一個普通列表:
ls = [x for x in range(101)]
為什么學習列表生成器:降低內(nèi)存kaixiao
兩種實現(xiàn):
1:[] ==> () generator
next方法的時候會返回下一個值
next()
2、將函數(shù)轉換為列表生成器
yield generator
send()使用
3、協(xié)程 實現(xiàn)一個多任務

在編程中,我們有時候會需要生成一個列表,但是該列表可能占用大量內(nèi)存,此時列表直接加載到內(nèi)存中就不可取了,python提供了一個列表生成器。
列表生成器是一段生成對應列表的算法:
1、將我們之前的[]換成() []==>()
next()方法來獲取下一個列表的值
for來迭代生成器
2、將函數(shù)轉換為列表生成器
斐波那契數(shù)列:從第三個數(shù)開始,前兩個數(shù)之和等于第三個數(shù)(1,2,3,5,8)
def fob(max):
temp = 0
a = 1
b = 0
while b <= max:
print(a)
如果列表是由一個函數(shù)得到,可以將這個函數(shù)轉換為一個列表生成器,使用關鍵字yield,當函數(shù)中出現(xiàn)yield關鍵字,此時該函數(shù)的返回值自動的轉換為一個列表生成器。

迭代器:
1、可以迭代的對象(collections.Iterator):
列表
元組
集合
字典
字符串
如何判斷一個對象是可以迭代的?
通過collections模塊的iterable類型來判斷。
from collections import Iterable
isinstance('abc',Iterable) #str是否可迭代
Ture

    isinstance([1,2,3],Iterable)  #list是否可迭代
    Ture

    isinstance(123,Interable)   #整數(shù)是否可迭代
    False

2、迭代器(collections.Iterator):
    能夠被next調用,返回下一個值的對象
    可以被next()函數(shù)調用并不斷返回下一個值的對象成為迭代器
    
    總結:
        1、生成器就是迭代器
        2、迭代器不一定是生成器
        3、可迭代的對象不一定是迭代器
        4、迭代器肯定可以被迭代
 3、將可迭代的對象轉換為迭代器
    迭代器 = iter(可迭代的對象)

什么是函數(shù)?
為了完成某一功能的代碼集合。
*args 函數(shù)的可變參數(shù),以元組的形式傳遞參數(shù)
*kwargs命名參數(shù)
def add(x,y,
args):
return x + y
遞歸:函數(shù)自身調用自身就會形成遞歸
函數(shù)調用
sum = add(5,8)

lambda表達式,也就是python匿名函數(shù),簡化了代碼操作。
增加了代碼難度,降低了可讀性,增加了代碼維護的成本。
cb(lambda msg:print("接受到一個信息,信息是==>"msg))

閉包:閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)
閉包是弱數(shù)據(jù)類型語言所特有的特性
閉包的特點:函數(shù)嵌套函數(shù)
閉包的作用:
1、局部變量全局化,防止全局變量被污染 js

面試題:
請簡略說明xrange和range的區(qū)別。
range:返回等差數(shù)列。構建等差數(shù)列,起點是start,終點是stop,但不包含stop,公差是step。start和step是可選項,沒給出start時,從零開始;沒給出step時,默認公差是1.
xrange:xrange與range類似,只是返回的是一個"xrange object"對象,而非數(shù)組list。要生成很大的數(shù)字序列的時候,用xrange會比range性能優(yōu)很多,因為不需要一上來就開辟出一塊很大的內(nèi)存空間,這兩個基本上都是在循環(huán)的時候使用。
區(qū)別:range可以返回一個可以用于所有目的的普通列表對象,而xrange將返回一個特殊目的的對象,尤其適用于迭代操作,但是xrange并不返回一個迭代器,如果需要這樣一個迭代器,可以調用iter(xrange(x))。xrange返回的特殊目的對象比range返回的列表對象消耗較少的內(nèi)存(范圍比較大的時候)。但是對特殊目的對象指向循環(huán)操作的開銷略微高于對列表執(zhí)行循環(huán)的開銷。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 用于python面試整理,主要來源于http://www.cnblogs.com/skiler/p/6952707...
    AIM外星人閱讀 2,470評論 0 13
  • 包(lib)、模塊(module) 在Python中,存在包和模塊兩個常見概念。 模塊:編寫Python代碼的py...
    清清子衿木子水心閱讀 3,897評論 0 27
  • 〇、前言 本文共108張圖,流量黨請慎重! 歷時1個半月,我把自己學習Python基礎知識的框架詳細梳理了一遍。 ...
    Raxxie閱讀 19,558評論 17 410
  • Python史上最全開發(fā)總結(轉自靜熙老師哈哈哈) 兩本不錯的書: 《Python參考手冊》:對Python各個標...
    春風在抱閱讀 836評論 1 4
  • 年輕,會傻到和時間賽跑,壓縮時間。殊不知,你哪能比的過它。最后把自己整的遍體鱗傷。只剩焦慮。 別和自己過不去。別老...
    李可樂不加冰閱讀 195評論 0 0

友情鏈接更多精彩內(nèi)容