Python練習 面向過程程式設計 模擬Grep命令

2022-04-06 00:31:54 字數 2526 閱讀 1606

其實這個面向過程編寫程式,是編寫程式的基礎,所以一定要好好掌握

此程式涉及知識點:裝飾器,生成器,協程器應用

1#2

import

os3 distinct = #

定義乙個列表用於判斷重複的檔案

4def autonext(target): #

生成器的next裝飾器

5def nexttarget(*args):

6 res = target(*args) #

res得到target(*args)的執行結果(target())

7 next(res)#

讓res進行一次next到yield的操作

8return res#

返回res當前的狀態(next到yield的狀態)

9return

nexttarget

1011 @autonext#

呼叫生成器的next裝飾器

12def

inputgetpath(target):

13 inputpath = yield

#inputpath等待yield的返回值

14 pathgen = os.walk(inputpath)#

將inputpath中的目錄子目錄和檔案遊走後返回列表[路徑,[子目錄],[檔案]]

15for i in

pathgen:

16for j in i[-1]:

17 filepath ="

%s\\%s

"%(i[0],j) #

將格式化好的路徑傳遞給filepath

18 target.send(filepath) #

使用send方式傳值給target中的yield

1920

@autonext

21def

openfile(target):

22while

true:

23 f = yield

#f等待yild的返回值,這裡是由inputpath()中的target.send傳遞過來的

24 with open(f) as f:#

將f路徑的檔案開啟賦值給f

25 target.send((f,f))#

由於最後要顯示檔案路徑所以,這裡要以元組的方式傳遞兩個值給下乙個target中的yield,f是檔案控制代碼,f是檔案路徑26#

("asdfasdf","f:\\a\\a.txt")

27@autonext

28def

catfile(target):

29while

true:

30 f,f = yield

#上方的openfile已經將f和f值傳遞到了這裡的yield並返回給f,f,既然openfile傳遞了兩個值,這裡也要用兩個值接收31#

f="asdfasdf",f="f:\\a\\a.txt"

32for i in

f :33 target.send((i,f))#

與openfile中的send一樣,將i的值和f的值傳遞給下乙個target中的yield

3435

@autonext

36def grepline(target,chioce):#

chioce是使用者輸入的即將檢索的關鍵字

37while

true:

38 line,f = yield

#同樣還是要用兩個引數來接收yield的返回值

39if (chioce in

line):

40 target.send(f) #

這裡就不需要傳遞兩個值了,因為最後的target只需要的到檔案路徑就可以了

4142

@autonext

43def

printinfo():

44while

true:

45 f = yield

46if(f not

in distinct): #

當f這個路徑值不存在distinct中時將f追加到distinct列表中

4748

print

(f)49

50 chioce = input("

請輸入你要檢索的關鍵字:")

51#這裡的呼叫其實,不難,仔細分析一下就能很容易的理解了

52 gene =inputgetpath(openfile(catfile(grepline(printinfo(),chioce))))

53try: #

針對stop告警的異常處理

54 gene.send("

f:\\a")

55except

stopiteration:

56print("

檢索完成

")

Python面向過程程式設計

目錄 面向過程 procedure oriented 是一種以過程為中心的程式設計思想。這些都是以什麼正在發生為主要目標進行程式設計,不同於物件導向的是誰在受影響。與物件導向明顯的不同就是封裝 繼承 類。在python中就一句花,可以流水線的程式設計,呼叫返回值 面向過程其實是最為實際的一種思考方式...

python物件導向程式設計練習

father.py 檔案 模組 coding utf 8 defhi i 5print haha return i class father object def init self print hi def del self print 類的銷毀 def dim self b dim print ...

python 面向過程程式設計與物件導向程式設計

面向過程 核心就是過程二字,過程指的是解決問題的步驟,設計一條流水線,機械式的思維方式.優點 複雜的問題流程化,進而簡單化.缺點 可擴充套件性差.物件導向 核心就是物件二字.物件就是特徵與技能的結合.上帝視角.優點 可擴充套件性強,缺點 程式設計複雜度高.應用場景 使用者需求經常變化,網際網路應用,...