寫乙個裝飾器@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...