python學習七(基礎知識)

2022-09-01 02:12:07 字數 4085 閱讀 6859

裝飾器生成器

迭代器裝飾器 decorator

或者稱為包裝器,是對函式的一種包裝。

它能使函式的功能得到擴充,而同時不用修改函式本身的**。

它能夠增加函式執行前、執行後的行為,而不需對呼叫函式的**做任何改變

def

showtime(f):

definner():

start =time.time()

f()end =time.time()

print("

spend %s

" % (end -start))

return

inner

@showtime

#bar=showtime(bar)

defbar():

print('

bar....')

time.sleep(3)

bar()

#結果

bar....

spend 3.000171661376953

import

time

defshowtime(f):

definner(x,y):

start =time.time()

f(x,y)

end =time.time()

print("

spend %s

" % (end -start))

return

inner

@showtime

#add=showtime(add)

defadd(a,b):

print(a+b)

time.sleep(1)

add(1,2)

#結果3

spend 1.0000572204589844

import

time

defshowtime(f):

def inner(*x,**y):

start =time.time()

f(*x,**y)

end =time.time()

print("

spend %s

" % (end -start))

return

inner

@showtime

#bar=showtime(bar)

def add1(*a,**b):

sums =0

for i in

a: sums +=i

print

(sums)

time.sleep(2)

add1(1,2,5,7,9)

#結果

24

spend 2.0001144409179688

import

time

#裝飾器引數

def logger(flag=''

):

defshowtime(f):

def inner(*x, **y):

start =time.time()

f(*x, **y)

end =time.time()

print("

spend %s

" % (end -start))

if flag == "

true":

print("

日誌記錄")

return

inner

return

showtime

@logger(

"true

")#showtime

def add1(*a,**b):

sums =0

for i in

a: sums +=i

print

(sums)

time.sleep(2)

add1(1,2,5,7,9)

#結果

24

spend 2.0001144409179688

日誌記錄

在 python 中,使用了 yield 的函式被稱為生成器(generator)

生成器都是迭代器,迭代器不一定是生成器

在呼叫生成器執行的過程中,每次遇到 yield 時函式會暫停並儲存當前所有的執行資訊,返回 yield 的值, 並在下一次執行 next() 方法時從當前位置繼續執行。每執行到乙個 yield 語句就會中斷,並返回乙個迭代值,下次執行時從 yield 的下乙個語句繼續執行。

def

f():

print("ok"

)

yield 1

print("ok"

)

yield 2

return

none

g =f()

print(g) #

next(g)

next(g)

next(g)

#報stopiteration

使用 yield 實現斐波那契數列:

import

sysdef

fib(max):

n,a,b = 0,0,1

while n

yield

a a,b = b,a+b

n += 1f = fib(7) #

f 是乙個迭代器,由生成器返回生成

print(f) #

while true: #

0 1 1 2 3 5 8

try:

print(next(f),end="")

except

stopiteration:

sys.exit()

代器是訪問集合元素的一種方式。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束,而在一系列結果的末尾時,會引發stopiteration錯誤。迭代器只能往前不會後退。

迭代器有兩個基本的方法:iter()next()

可以直接作用於for迴圈的物件統稱為可迭代物件:

一類是集合資料型別,如list、tuple、dict、set、str等

一類是generator,包括生成器和帶yield的generator function。

l=[1,2,3,5]

d = iter(l) #

建立迭代器物件

print(d) #

print(next(d)) #

輸出迭代器的下乙個元素

print

(next(d))

print

(next(d))

print

(next(d))

print(next(d)) #

報stopiteration

view code

自定義迭代器

把乙個類作為乙個迭代器使用需要在類中實現兩個方法 __iter__() 與 __next__():

__iter__() 方法返回乙個特殊的迭代器物件, 這個迭代器物件實現了 __next__() 方法並通過 stopiteration 異常標識迭代的完成。

__next__() 方法(python 2 裡是 next())會返回下乙個迭代器物件。

class

mynum:

def__iter__

(self):

self.a = 1

return

self

def__next__

(self):

if self.a <= 20:

x =self.a

self.a += 1

return

x

else

:

raise

stopiteration

mynum =mynum()

itr =iter(mynum)

for x in

itr:

print(x)

學習C 基礎知識(七)

1 由於 web 服務是跨越 web進行訪問的,並可以從任何平台呼叫,因此應避免在 web服務中使用圖形使用者介面 gui 2 使用webservice l 建立webservice 檔案,需要被其他檔案呼叫的方法需要加上 webmethod 標記 如 webmethod public int ad...

Python學習基礎知識

1 python中的布林運算 1 python把0 空字串 和none看成 false,其他數值和非空字串都看成 true 2 python直譯器在做布林運算時,只要能提前確定計算結果,它就不會往後算了,直接返回結果。2 python中的list 新增 2 用list的 insert 方法,它接受兩...

Python基礎知識學習

anaconda環境配置 anaconda pycharm環境 參考 直譯器 參考 和 python入門 anaconda和pycharm的安裝和配置 print and input print hello,world x 12 print x s hello y len s print the l...