day12 作業裝飾器

2021-10-24 18:32:18 字數 3882 閱讀 4453

寫乙個裝飾器@tag要求滿足如下功能:

def

tag(name)

:def

test

(func)

:def

new_func

(*args,

**kwargs)

: result = func(

*args,

**kwargs)

return f'<>'

return new_func

return test

@tag(name=

'p')

defrender

(text)

:# 執行其他操作

return text

@tag(name=

'div'

)def

render2()

:return

'abc'

print

(render(

'hello'))

# 列印出: hello

print

(render2())

# 列印出: abc

為函式寫乙個裝飾器,根據引數不同做不同操作。

flag為 true,則 讓原函式執行後返回值加 100,並返回。

flag為 false,則 讓原函式執行後返回值減 100,並返回。

defchange

(flag:

bool):

deftest

(func)

:def

new_func

(*args,

**kwargs)

: result = func(

*args,

**kwargs)

iftype

(result)in(

int,

float

,bool

,complex):

if flag:

return result+

100return result-

100return result

return new_func

return test

@change(flag=

false

)def

render1()

:return

100print

(render1())

"""結果:

0"""

為函式寫乙個裝飾器,根據不同的運算子和資料對原函式的返回值進行相應的數值操作

例如:

運算子是+,資料是 100, 就對原函式的返回值進行加100的處理

運算子是-

, 資料是 20,就對原函式的返回值進行減20的處理

運算子是*

, 資料是 3

, 就對原函式的返回值進行乘3的處理

運算子是/

, 資料是 2, 就對原函式的返回值進行除2的處理

其他情況的符號不做處理

deftransform

(operator:

str, data:

int)

:def

test

(func)

:def

new_func

(*args,

**kwargs)

: result = func(

*args,

**kwargs)

iftype

(result)in(

int,

float

,bool

,complex):

if operator ==

'+'and data ==

100:

return result + data

elif operator ==

'-'and data ==20:

return result - data

elif operator ==

'*'and data ==3:

return result * data

elif operator ==

'/'and data ==2:

return result / data

else

:return result

return result

return new_func

return test

@transform(operator=

'*', data=3)

defxx()

:return

100print

(xx())

"""結果:

300"""

寫乙個鬥地主發牌器

import random

defcreate_poker()

: color =

['♥'

,'♣'

,'♦'

,'♠'

,'s_joker'

,'b_joker'

] size =

list

(range(2

,11))

size.extend(

'jqka'

)for x in color:

if x in

('s_joker'

,'b_joker'):

yield x

else

:for y in size:

yield f''

defdeal

(poker)

:for i in poker:

yield i

poker1 = create_poker(

)y =

list

(poker1)

random.shuffle(y)

poker2 = deal(y)

landlord =

peasant1 =

peasant2 =

for i in

range(20

):str(

next

(poker2)))

iflen

(peasant1)

<

17and

len(peasant2)

<17:

str(

next

(poker2)))

str(

next

(poker2)))

hua =

shu =

print

(f'地主牌:'

)print

(f'農名1牌:'

)print

(f'農名2牌:'

)"""

結果:地主牌:['b_joker', 's_joker', '♥2', '♣a', '♦a', '♣j', '♠10', '♣9', '♦9', '♣8', '♦8', '♠7', '♠6', '♥6', '♣6', '♦6', '♥5', '♦5', '♣4', '♥3']

農名1牌:['♠2', '♠a', '♥a', '♠k', '♣k', '♣q', '♦q', '♠j', '♥j', '♦j', '♥10', '♠8', '♥8', '♠5', '♠4', '♥4', '♦3']

農名2牌:['♣2', '♦2', '♥k', '♦k', '♠q', '♥q', '♣10', '♦10', '♠9', '♥9', '♥7', '♣7', '♦7', '♣5', '♦4', '♠3', '♣3']

"""

day12 裝飾器高階

day12 裝飾器高階 裝飾器高階 functools.wraps 帶引數的裝飾器 多個裝飾器裝飾用乙個函式 def outer args,kwargs 接收的時候是聚合 成元祖的形式 print args print args def inner args print inner args inn...

python學習day12 裝飾器高階

裝飾器的高階 functools.wraps 帶引數的裝飾器 多個裝飾器裝飾同乙個函式 裝飾器 開發原則 開放封閉原則 裝飾器的作用 在不改變原函式的呼叫方式的情況下,在函式的前後新增功能 裝飾器的本質 閉包函式 def inner args,kwargs print 在被裝飾的函式執行之前做的事 ...

python菜鳥學習Day12 裝飾器,列舉類

裝飾器 decorater 當想改變函式的功能,而不改變函式本身定義的時候,就用到了裝飾器。比如,列印函式呼叫的日誌。正常來說在函式中新增print 或者呼叫log包就行。但不想改變函式本身,就需要裝飾器來完成。裝飾器是高階函式,引數是需要列印日誌的函式,返回值也是函式。from functools...