對迭代器與生成器的區別
迭代器和生成器
迭代器
可迭代協議-含有iter方法的都是可迭代的
迭代器協議-含有next和iter的都是迭代器
特點:節省記憶體空間
方便逐個取值,乙個迭代器只能取一次
生成器
生成器函式
含有yield關鍵字的函式都是生成器函式
生成器函式的特點:
呼叫之後函式內的**不執行,返回生成器
每次從生成器中取乙個值就會掃一段**,遇見yield停止
如何從生成器中取值:
for:如果沒有break會一直取完
next:每次只取乙個
生成器表示式:
條件成立想放在生成器中的值 for in 可迭代的if條件
內建函式:
作用域相關:1.globals() 獲取全域性變數的字典
2.locals() 獲取執行本方法所在命名空間內的區域性變數的字典
3.global 使用場景和作用域不一樣
迭代器:
1.__next__()與next()
迭代器的實現方法:
def next(迭代器):實現方法(簡易)
迭代器.__next__()
迭代器 = iter(可迭代的)
2.range()是可迭代的但不是乙個迭代器,range()迭代後沒有生成物件
例:'__next__' in iter(range(10))
如果想要列印range(),需加list(range())或其它列印迭代器的物件
呼叫相關:
1.dir() 檢視對像的屬性和方法
2.callable() 檢視物件是否可呼叫,返回值true和false
例:callable(print)
def func_1():pass
callable(func_1)
其它: help() 檢視方法名的用法
help與dir
help仔細查詢,幫助
dir簡略查詢
例:help(dir) 退出按'q'
模組相關:
1.import
2.time = __import__('time') 不常用
檔案相關:
open()
例: print(f.writable()) 能不能寫
print(f.readable()) 能不能讀
記憶體相關:
1.id()
2.hash()
注意:1.對一次程式執行中,保證可雜湊的值不會變
2.把可雜湊的資料型別轉換為一串數字
3.字典的定址方式
輸入輸出相關:
1.input()
2.print()
例:print有很多種引數,有很多方式接收傳進來的值
a. print(1,2,3,4,5,sep='|')
b. print(1,2,3,end='')
將輸入內容輸出到檔案
c. f = open('file','w')
print('aaaa',file=true)
f.close()
d. 老師寫的進度條顯示,其中用到知識點關鍵點為格式化輸出,flush=true
'''import time
for i in range(0,101,2):
time.sleep(0.01)
char_num = i//2 #列印多少個'*'
per_str = '\r%s%% : %s\n' % (i, '*' * char_num) if i == 100 else '\r%s%% : %s'%(i,'*'*char_num)
print(per_str,end='', flush=true)
''' 另外方面:progress bar(為專業列印進度條)
字串**執行:
1.compile(source, filename, mode[, flags[, dont_inherit]])
'''source -- 字串或者ast(abstract syntax trees)物件。。
filename -- **檔名稱,如果不是從檔案讀取**則傳遞一些可辨認的值。
mode -- 指定編譯**的種類。可以指定為 exec, eval, single。
flags -- 變數作用域,區域性命名空間,如果被提供,可以是任何對映物件。。
flags和dont_inherit是用來控制編譯原始碼時的標誌
'''字串型別的**編譯。**物件能夠通過exec語句或eval進行求值
2.eval(expression[, globals[, locals]])
'''expression -- 表示式。
globals -- 變數作用域,全域性命名空間,如果被提供,則必須是乙個字典物件。
locals -- 變數作用域,區域性命名空間,如果被提供,可以是任何對映物件。
'''eval有返回值,eval一般時候不用,
只能用在你明確知道你要執行的**是什麼 流程,執行,互動
3.exec obj
'''obj -- 要執行的表示式
'''exec 返回值永遠為 none。執行儲存在字串或檔案中的python語句,exec沒有返回值
例: 1. name = input('>>>') 上面第二條相關
eval(name) name可巢狀**,危險
2. code1 = 'for i in range(10):print(i)' #流程
com = comple(code1,'','exec')
code2 = '1+2+3' #執行
com = compile(code2,'','eval')
code3 = 'name = input('>>')' #互動
com = compile(code3,'','sigle')
exec(com) #pycharm會報錯,但執行後無錯
print(name)
python重寫內建函式 python 內建函式
說明 zip 函式用於將可迭代的物件作為引數,將物件中對應的元素打包成乙個個元組,然後返回由這些元組組成的列表。如果各個迭代器的元素個數不一致,則返回列表長度與最短的物件相同,利用 號操作符,可以將元組解壓為列表。語法 zip iterable1,iterable2,引數 iterable 乙個或多...
python內建函式簡稱 Python內建函式詳解
此文參考python文件,然後結合自己的理解,寫下來,一方面方便自己,讓自己好好學習,順便回憶回憶 另一方面,讓喜歡的盆友也參考一下。經查詢,3.6版本總共有68個內建函式,主要分類如下 數 算 7個 型別轉換 24個 序列操作 8個 物件操作 9個 反射操作 8個 變數操作 2個 互動操作 2個 ...
python內建函式使用 python內建函式使用
eval函式執行python表示式,有返回值 eval 1 2 3 4 5 exec函式執行的是python語句,沒有返回值 exec print 123 將字串型別的 編碼.物件能夠通過exec語句來執行或者eval 進行求值,c只是編譯,不執行 code for i in range 10 pr...