
一、什么是生成器?
使用了yield函式 就被稱之為生成器,生成器是一個回傳迭代器的函式,說白了生成器就是迭代器,只能用于迭代操作,
不懂?沒關系,下面就一個斐波那契數列為例來進行講解:
依靠簡單回圈生成的一個“斐波那契數列”
a,b = 0,1
while a<100:
a,b = b,a+b
print(a)
程式運行結果如下:

這段代碼是通過非遞回的方法實作斐波那契數列,接下來,我就用生成器的方式實作斐波那契數列
import sys
def fibonacci(n): #生成迭代器函式
a,b,count = 0,1,0
while True:
if(count > n):
return n
yield a #使用生成器(迭代器,當程式遇到yield函式時,會暫停并保存當前所有的資訊——
# 并回傳yield的值,然后程式運行到next()函式時,并從當前位置繼續運行
a,b = b,a+b
count = count + 1
f = fibonacci(10) #f是一個迭代器,由生成器生成,10為遞回結束的信號
while True:
try:
print(next(f),end=" ")
except:
sys.exit()
程式的運行結果如下:

二、什么是迭代器?
迭代是Python眾多強大的功能之一,它是訪問集合元素的一種方式,它是可以記住遍歷物件的位置,這點和for回圈中enumerate關鍵字有點相似,不過enumerate其實是記住陣列,元組,串列等等下標的一個函式,但是迭代器會從集合中的第一個元素開始訪問,一直到最后一個元素,迭代器只能往前不會后退,
迭代器有兩種方法:
iter()
next()
字串,串列,元組,字典(鍵值)的物件都可以創建迭代器,下面是幾個簡單得實體
list = [2,1,4,6]
It = iter(list)
for i in It:
print(i,end=" ")

同理,也可以使用next() 函式
import sys
list = [11,22,33,454]It = iter(list)
while True:
try:
print(next(It))
except:
sys.exit()

三、 什么是裝飾器?
前面講了生成器,迭代器怎么又來了個裝飾器 ,裝飾器的功能還是很強大的,它能夠不改變函式本地的結構,卻可以給函式增加額外的功能,下面就以實體來講解
1、我們先用函式列印一句話
def sayHi(): print("Hi,man")
#sayHi() #這是函式呼叫的方法#還有另一種輸出的方法
x = sayHi
x()
現在我們希望可以在“sayHi”函式之前輸入一句話,這種在代碼運行期間動態增加功能的方式,稱之為裝飾器,下面我們就改改上面這個代碼:

2、改一改
def sayHello(func):
def inner():
print("Hello,I am Gorit")
return func
return inner()
def sayHi():
print("Hi,man")
x = sayHello(sayHi)
s()

這樣的效果看起來不是很好,我們每次都要加個功能都要使用
x = sayHello(sayHi)
s()
對于這種情況,Python提供了語法糖 —— “@”,這樣我們就可以輕松的輸出我們想要的陳述句
3、有了語法糖的加入,程式變得更簡單
def sayHello(func):
def inner():
print("Hello,I am Gorit")
return func
return inner()
@sayHellod
ef sayHi():
print("Hi,man")
sayHi()

在上面的代碼中,我們定義了一個sayHello(func)函式,sayHello接受引數func,里面又內嵌一個 inner()函式,然后輸出(“Hello,I am Gorit”,之后回傳 func 引數,(也就是我們要傳入的引數),然后再回傳inner函式,然后我們發現這就是一個封閉的函式,也稱為閉包函式
然后我們再sayHi()之前加入 @sayHello, 其目的使程式運行到這里會呼叫裝飾器函式"sayHello",并把被裝飾的函式"sayHi"作為引數傳入,此時"sayHi"是指向sayHello.inner 的地址,然后再呼叫sayHi時,實則是呼叫sayHello.inner
最后: 可以加入群號:914172719 ! 進去有許多資料共享!資料都是面試時面試官必問的知識點,也包括了很多測驗行業常見知識,其中包括了有基礎知識、Linux必備、Shell、互聯網程式原理、Mysql資料庫、抓包工具專題、介面測驗工具、測驗進階-Python編程、Web自動化測驗、APP自動化測驗、介面自動化測驗、測驗高級持續集成、測驗架構開發測驗框架、性能測驗、安全測驗等,
如果我的博客對你有幫助、如果你喜歡我的博客內容,請 “點贊” “評論” “收藏” 一鍵三連哦!
好文推薦
轉行面試,跳槽面試,軟體測驗人員都必須知道的這幾種面試技巧!
面試經:一線城市搬磚!又面軟體測驗崗,5000就知足了…
面試官:作業三年,還來面初級測驗?恐怕你的軟體測驗工程師的頭銜要加雙引號…
什么樣的人適合從事軟體測驗作業?
那個準點下班的人,比我先升職了…
測驗崗反復跳槽,跳著跳著就跳沒了…
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/297094.html
標籤:其他
上一篇:大學渾渾噩噩度過四年;畢業做過行政、人事、繪圖等作業;也沒呆多久,選擇軟體測驗成功逆襲達到月薪25K...
下一篇:編碼之道(一):程式員的“圣經“
