裝飾器和單例模式 遞迴求斐波拉契數列

2022-07-21 02:15:13 字數 2266 閱讀 2693

li =[1,2,3,4]

a = li.__iter__

()while

true:

try:

print(a.__next__

())

except

stopiteration as e:

break

#

fla=true

#裝飾器

defflag(fla):

defouter(func):

def inner(*args,**kwargs):

iffla:

print('

函式執行前')

res = func(*args,**kwargs)

print('

函式執行後')

return

res res = func(*args, **kwargs)

return

res

return

inner

return

outer

fla=false

@flag(fla)

deffunc2():

print('

執行函式')

func2()

1. 裝飾器方式實現

#

裝飾器實現單例模式

defsinglenton(cls):

_instance ={}

def _singlenton(*args,**kwargs):

if cls not

in_instance:

_instance[cls] =cls(*args,**kwargs)

return

_instance[cls]

return

_singlenton

@singlenton

class

a():

def__init__

(self,x):

self.x=x

pass

a1=a(1)

a2=a(2)

print(id(a1),id(a2)) #

1584069849608 1584069849608

2. 基於 __new__實現單例模式

class

singlenton(object):

_instance=none

def__init__

(self):

pass

def__new__(cls, *args, **kwargs):

ifnot hasattr(singlenton,'

_instance'):

singlenton._instance=cls

return

singlenton._instance

s1 =singlenton()

s2 =singlenton()

print(id(s1),id(s2)) #

1867687056 1867687056

#

1 1 2 3 5 8

deffunc(n):

#n 表示斐波拉契數列第幾位數

if n<=2:

return 1

return func(n-1)+func(n-2)

#斐波拉契 數列

n =8

for i in range(1,n+1):

print(func(i))

#

map()

li=[4,6,3,1]

defsquare(x):

return x*x

print

(list(map(square,li)))

#zip()

#filter()

defis_odd(n):

return n%2==1li2=[1,2,3,4,5,6]

new_list=filter(is_odd,li2)

print

(list(new_list))

#sorted()

dic=[,,]

sort_dic=sorted(dic,key=lambda x:x['

age'

])print(sort_dic)

遞迴詳解(斐波拉契和漢諾塔應用)

1 什麼是遞迴 遞迴是一種特殊的演算法,簡單來說,程式中的函式不僅僅是被其他函式呼叫,也可以被自己本身呼叫,乙個函式呼叫自己就是所謂的 遞迴 任何可以用選擇結構和迴圈結構來編寫的程式 都可以用遞迴編寫。2 遞迴的條件 1 可以反覆執行的遞迴過程 2 有乙個跳出遞迴過程的條件,也就是不能無限遞迴。舉乙...

裝飾器和單例模式練習

coding utf 8 usr bin env python3 coding utf 8 time 2020 5 15 23 46 author 小多肉 email 1021181701 qq.com todo 1 實現乙個網路請求超時重試的裝飾器,裝飾下面的功能函式 如果請求網路超時,或者連線超...

遞迴和非遞迴分別實現求第n個斐波那契數

在數學上,斐波納契數列以如下被以遞迴的方法定義 f 0 0,f 1 1,f n f n 1 f n 2 n 2,n n include include int fib int n else int main 一直以來很多c語言教科書在講遞迴函式的時候總會拿斐波那契數列作為例子。但是這不意味著fibo...