1. 程式人生 > >用函數裝飾一首詩

用函數裝飾一首詩

外包裝 而是 append 完整 輸出結果 wrapper 簡單 功能 wrap

# -*- coding: UTF-8 -*-
# 層層嵌套,像謎語
# 函數裝飾器用途非常廣泛,在許多包裏隨處可見
# 一直不太會用,決心重點研究一下

# 模塊化思維的前提:
# 實現一個功能有很多步驟,我們盡可能不一蹴而就,而是分模塊開發
# 既然要層層分解,寫函數的時候,最好就不要讓單一的函數過於復雜
# 一個函數僅實現一個小功能,只返回一個結果為上佳

# 對函數裝飾器的理解:
# 函數的裝飾器其實是函數模塊化思維的一種體現
# 裝飾器可以翻譯成‘外包裝’,層層包裹裏面的東西,類似洋蔥
# 在每一層我們都可以加入一些元素,以最簡單的print為例
# 突然感覺用裝飾器嵌套裝飾器可以完美印出一首詩,邏輯很簡單
# 包裝7層,每個裝飾器讀兩頭,最後拼接成完整一首詩。 # 函數讀取內容 def reader(filename): line_list = [] f = open(filename) for eachline in f: line_list.append(eachline) return line_list # 運行013,這裏是裝飾器最深處 def line0_13(func): def wrapper(line_list): print(line_list[0]) func(line_list)
print(line_list[13]) return wrapper # 運行112,切013 def line1_12(func): @line0_13 def wrapper(line_list): print(line_list[1]) func(line_list) print(line_list[12]) return wrapper # 運行211,切112 def line2_11(func): @line1_12 def wrapper(line_list): print
(line_list[2]) func(line_list) print(line_list[11]) return wrapper # 運行310,切211 def line3_10(func): @line2_11 def wrapper(line_list): print(line_list[3]) func(line_list) print(line_list[10]) return wrapper # 運行49,切310 def line4_9(func): @line3_10 def wrapper(line_list): print(line_list[4]) func(line_list) print(line_list[9]) return wrapper # 運行58,切到49 def line5_8(func): @line4_9 def wrapper(line_list): print(line_list[5]) func(line_list) print(line_list[8]) return wrapper # read_start開始讀取,切裝飾器58 @line5_8 def read_start(line_list): print(line_list[6]) print(line_list[7]) filename = raw_input(請輸入秘密文檔(例:D://secret.txt):) line_list = reader(filename) read_start(line_list) # 請輸入秘密文檔(例:D://secret.txt):D://secret.txt # # # 輸出結果: # # 《春》---穆旦 # # 綠色的火焰在草上搖曳, # # 他渴求著擁抱你,花朵。 # # 反抗著土地,花朵伸出來, # # 當暖風吹來煩惱,或者歡樂。 # # 如果你是醒了,推開窗子, # # 看這滿園的欲望多麽美麗。 # # 藍天下,為永遠的謎蠱惑著的 # # 是我們二十歲的緊閉的肉體, # # 一如那泥土做成的鳥的歌, # # 你們被點燃,卷曲又卷曲,卻無處歸依。 # # 呵,光,影,聲,色,都已經赤裸, # # 痛苦著,等待伸入新的組合。 # # -----------寫於1942年 # 穆旦詩有一種跳躍的美

用函數裝飾一首詩