一、裝飾器
1、什麼是裝飾器? 器=》工具,裝飾=》增加功能 1、不修改原始碼 2、不修改呼叫方式 裝飾器是在遵循1和2原則的基礎上為被裝飾物件增加功能的工具 2、實現無參裝飾器 1、無參裝飾器的模板 def outter(func): def wrapper(*args,**kwargs): res=func(*args,**kwargs) return res return wrapper 2、使用:在被裝飾物件正上方單獨一行 @無參裝飾器名 def foo(): pass 3、實現有參裝飾器 1、有參裝飾器的模板 def outter2(x,y,z): def outter(func): def wrapper(*args,**kwargs): res=func(*args,**kwargs) return res return wrapper return outter 2、使用:在被裝飾物件正上方單獨一行 @有參裝飾器名(1,2,3) def foo(): pass
二、迭代器
#1、什麼是迭代?:迭代是一個重複的過程,並且每次重複都是基於上一次的結果而來 # while True: # print(`=------->`) # l={`x`:1,`y`:2} # n=0 # while n < len(l): # print(l[n]) # n+=1 #2、要想了解迭代器到底是什麼?必須先了解一個概念,即什麼是可迭代的物件? #可迭代的物件:在python中,但凡內建有__iter__方法的物件,都是可迭代的物件 num=1 #以下都是可迭代的物件 # str1=`hello` # list1=[1,2,3] # tup1=(1,2,3) # dic={`x`:1} # s1={`a`,`b`,`c`} # f=open(`a.txt`,`w`,encoding=`utf-8`)
三、生成器
#生成器: # 函式內包含有yield關鍵字, # 再呼叫函式,就不會執行函式體程式碼,拿到的返回值就是一個生成器物件 def chicken(): print(`=====>first`) yield 1 print(`=====>sencond`) yield 2 print(`=====>third`) yield 3 obj=chicken() # print(obj) # 生成器本質就是迭代器,也就是說生成器的玩法其實就是迭代器的玩法 # print(obj.__iter__() is obj) # res=obj.__next__() # print(res) # # res1=obj.__next__() # print(res1) # # res2=obj.__next__() # print(res2) # # obj.__next__() # 1、iter_obj=obj.__iter__(),拿到迭代器 #2、出發iter_obj.__next__(),拿到該方法的返回值,賦值給item #3、周而復始,直到函式內不在有yield,即取值完畢 #4、for會檢測到StopIteration異常,結束迴圈 # for item in obj: # print(item) #總結yield: #1、為我們提供了一種自定義迭代器的方式, # 可以在函式內用yield關鍵字,呼叫函式拿到的結果就是一個生成器,生成器就是迭代器 #2、yield可以像return一樣用於返回值,區別是return只能返回一次值,而yield可返回多次 # 因為yield可以儲存函式執行的狀態 # def my_range(): # print(`start........`) # n=0 # while True: # yield n # n+=1 # obj=my_range() # print(obj) # print(obj.__next__()) # print(obj.__next__()) # print(obj.__next__()) # print(obj.__next__()) # for i in my_range(): # print(i) def my_range(start,stop,step=1): n=start while n < stop: yield n #yield 4 n+=step #5 # obj=my_range(3,7,2) #3,5, # print(obj.__next__()) # print(obj.__next__()) # print(obj.__next__()) # print(obj.__next__()) # print(obj.__next__()) for item in my_range(5,10,2): print(item)
四、程式導向程式設計
1、什麼是程式導向程式設計: 核心是”過程“二字,過程指的是解決問題的步驟 即先幹什麼,再幹什麼 基於該思想編寫程式就好比在設計一條流水線,是一種 機械式的思維方式 2、優點: 複雜的問題流程化、進而簡單化 3、缺點: 擴充套件性差
xxxx
#1、步驟一:拿到使用者輸入的合法的資訊:使用者名稱、密碼、餘額、年齡 db_path=`db.txt` def get_uname(): while True: uname=input(`使用者名稱>>:`).strip() if not uname.isalpha(): print(` 33[45m使用者名稱必須為英文字母... 33[0m`) continue with open(r`%s` %db_path,`r`,encoding=`utf-8`) as f: for line in f: uinfo=line.strip(` `).split(`,`) if uname == uinfo[0]: print(` 33[45m使用者名稱已存在... 33[0m`) break else: return uname def get_pwd(): while True: pwd1=input(`請輸入密碼>>: `).strip() pwd2=input(`再次輸入密碼>>: `).strip() if pwd1 == pwd2: return pwd1 else: print(` 33[45m兩次輸入的密碼不一致,請重新輸入... 33[0m`) def get_bal(): while True: bal=input(`請輸入餘額: `).strip() if bal.isdigit(): # bal=int(bal) return bal else: print(` 33[45m錢必須是數字,傻叉... 33[0m`) def get_age(): pass #2、步驟二:寫入檔案 def file_hanle(uname,pwd,bal,age): with open(r`%s` %db_path,`a`,encoding=`utf-8`) as f: f.write(`%s,%s,%s,%s ` %(uname,pwd,bal,age)) # 註冊功能 def register(): #步驟1: uname=get_uname() #拿到合法的使用者名稱 pwd=get_pwd() #拿到合法的密碼 bal=get_bal() #拿到合法的餘額 #步驟2: file_hanle(uname,pwd,bal) #寫入檔案