潭州課堂25班:Ph201805201 第十五課 叠代器,生成器 (課堂筆記)
阿新 • • 發佈:2018-06-21
update hex color encode dom edi 三元表達式 內置變量 utf8
推導表達式
li1 = list() for i in range(10): # 叠代循環內容 li1.append(i) print( li1 ) ----》》》 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] li2 =[i for i in range(10)] # 推導表達式的語法 # 列表元素, for 循環 print(li2) ----》》》 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
li3= [‘bin‘ for i in range(6)]
# 列表元素, for 循環
print(li3)
----》》》 [‘bin‘, ‘bin‘, ‘bin‘, ‘bin‘, ‘bin‘, ‘bin‘]
推導表達式 加判斷
for i in range(10): if i % 2 == 0: li4.append(i) print(li4) ----》》》》 [0, 2, 4, 6, 8] li5 = [i for i in range(10) if i % 2 == 0 ] 三元表達式
# 添加的值,for 循環, 判斷/條件 print(li5) ----》》》》 [0, 2, 4, 6, 8]
叠代器:
1,叠代器協議:對象必須提供一個 next 方法,執行該方法後要麽返回叠代的下一項,要麽就引起 Stoplteration 異常,
以終止叠代,(只能往後走,不能往前找,)
2,可叠代對象:實現了地帶協議的對象,(如何叠代對象內部定義一個 __iter__() 方法)
3,協議是一種約定,可叠代對象實現了叠代協議,python 的內部工具(如 for 循環,sum,min,max海曙)
使用叠代器訪問對象,
for 循環原理:
l = [1,3,4]
for i in l:
print(i)
原理:
將 iter(l) 的值 進行 next 方法
生成器有兩種表現形式:
生成器表達 式,
yy =( i for i in range(10) ) 與推導表達 式不同之處在於【】和()
函數形式
def test():
yield 1
yield 2
yield 取代了 return
函數中 只要有 yield,其運行就得到生成器,
生成器自動實現了叠代器協議,(iter)
生成器 # 列表生成式 a = [ x for x in range(10)] print(a) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # 列表生成式 def f (n): return n**3 a = [ f(x) for x in range(10)] 生成器: a = (x for x in range(10)) print(a) print( next(a) ) print( next(a) ) print( next(a) ) 生成器: a = (x for x in range(10)) for i in a: print( i ) 生成器: def y (): yield 1 def y (): print(‘1‘) yield 1 print(‘2‘) yield 2 # a = (x for x in range(10)) # for i in a: # print( i ) for i in y(): print(i) 斐波那契數列: def f (x): n, a, b = 0, 0, 1 while n < x : print( b ) a, b = b ,a + b n += 1 y = int (input(‘‘)) f ( y ) : yield 的enxt 方法 def f (x): n, a, b = 0, 0, 1 while n < x : yield a a, b = b ,a + b n += 1 g = f (5) print( g ) print( next(g) ) print( next(g) ) print( next(g) ) print( next(g) ) :send def fo (): print(‘123‘) m = yield 1 print( m ) yield 2 n = fo() n.send ( None ) ## 等於 next(b) n.send ( ‘abc‘ ) 叠代器,: 生成器都是叠代器 l = [1,3,4,5] b = iter(l) : itter: 返回個可叠代對象 l = [1,3,4,5] b = iter(l) print(b) print( next(b) ) for i in b: print(i)
模塊
1. time import time # time.sleep(2) # **** # print(time.time()) # **** # print( time.gmtime()) ## 世界標準時間 # print( time.localtime()) ## 電腦裏的時間 ****** # print(time.clock()) st = time.localtime() ## 顯示時間格式化 ********* print( time.strftime(‘%Y--%m--%d %H:%M:%S‘,st )) ## print(time.strptime(‘2018--04--25 17:33:14‘, ‘%Y--%m--%d %H:%M:%S‘)) a = time.strptime(‘2018--04--25 17:33:14‘, ‘%Y--%m--%d %H:%M:%S‘) ## 單獨取出時間如 年 print( a[0]) print( a.tm_year) print( time.ctime()) import datetime print( datetime.datetime.now() ) 2,random 隨機函數 import random print( random.random() ) print( random.randint(1,10) ) print( random.choice( ‘hello‘) ) print( random.randrange( 1,10) )
3,os 系統操作 import os print(os.getcwd()) ## 獲取工作目錄 os.chdir(r‘c:\users‘) ## 改變工作目錄 print(os.curdir) ## 當前目錄 print(os.pardir) ## os.makedirs(‘a\\b\\c‘) ## 遞歸創建文件夾 os.mkdir(‘a‘) ## 創建文件夾 os.removedirs(‘a\\b\\c‘) ## 刪除文件夾 os.removedirs(‘a\\b\\c‘) ## 遞歸刪除文件夾 a = os.listdir( r‘E:\pycharm\201804‘ ) ## 展示出目錄裏的全部 print( a ) os.remove( ‘1.png‘ ) ##刪除文件 os.rename(‘set.py‘,‘裝飾器.py‘) ## 重命名文件‘酒文件名’,‘新文件名’ q = os.stat(‘666.py‘) ## 獲取文件信息 print(q) print( os.sep ) ## os.linesep ## 換行 os.environ ## 獲取環境變量 os.path.dirname(‘201804/3.py‘) ## 獲取文件所在的目錄 os.path.join(a,b) ### 路徑拼接 os.path.getatime() ## 最後一次存取時間 os.path.getmtime() ## 最後一次修改時間
4, sys import sys 5, hashlib 加密 import hashlib m = hashlib.md5 ## 加密算法 m.update( ‘hello‘.encode(‘utf8‘)) ##對 hello 加密 print( m.hexdigest() ) ## 加密後. s = hashlib.sha256() ## 加密算法
模塊調用
# 模塊的調用: import 模塊名 import 模塊名 ,模塊名 from 模塊名 import 方法(函數名) from 模塊名 import * from 模塊名 import 方法(函數名)as 新方法 ## 包的調用 import 包名 import 模塊名 import 包名.包名 import 模塊名 import 包名.包名.模塊名 import 方法 from 包名 import 模塊名 __file__ 相對路徑的內置變量 import os os.path.dirname( os.path.abspath(__file__) ) 上一級(得到絕對路徑) if __name__ == ‘__main__‘:
潭州課堂25班:Ph201805201 第十五課 叠代器,生成器 (課堂筆記)