Python介绍(12)

2.11 函数 (四)

装饰器

In [130]:

a = 10

b = [12,12]

def test():

print('test')

c = test

In [131]:

c

Out[131]:

<function __main__.test>

In [132]:

c.__name__

# c 实际是 test

Out[132]:

'test'

可以把函数赋值给一个变量 写函数时往往是有返回值的,函数可以返回一个函数

In [133]:

def test(func):

return func  #返回它本身

​def func():

print('func run')

​test(func)

Out[133]:

<function __main__.func>

In [134]:

def test(func):

return func

def func():

print('func run')

f = test(func)

f.__name__

Out[134]:

'func'

In [135]:

def test(func):

return func

def func():

print('func run')

f = test(func)

f.__name__

f()

func run

函数可以当做函数的返回值进行返回

random生成的是一个从0到10的floot类型的随机数

 

#随机生成一个从0到1的浮点值

In [142]:

random.random()

Out[142]:

0.8830469492906753

In [143]:

def test():

return random.random()     #返回一个从0到1的浮点值

 

#要求函数返回的浮点值保留3个有效数字  (不太好)

In [144]:

def test():

return round(random.random(),3)

In [145]:

test()

Out[145]:

0.736

另一个语法糖,装饰器

#返回一个从0到1的浮点值

In [147]:

def test():

return random.random()

In [148]:

def decorator(func): #传进来func,(func是test函数)

def wrapper(*args,**kwargs):

return func()

return wrapper  # 返回wrapper ,wrapper 又是一个函数名,wrpper执行的的就是开始传进去的function,wrapper接受的任何参数都会传给function

In [149]: f = decorator(test)

In [150]: f

Out[150]:

<function __main__.decorator.<locals>.wrapper>

In [151]:

f()

Out[151]:

0.20663489784291156

In [157]: f.__name__

#f可以当做funtion来调用  #function 翻译 :功能、函数

Out[157]: 'wrapper'

 

Python中调用:

In [153]:

@decorator

def test():

return random.random()

In [154]:

def decorator(func):

def wrapper(*args,**kwargs):

return func()

return wrapper

In [155]:

f = decorator(test)

In [156]: test()

Out[156]: 0.4721355877472021

In [158]: test.__name__

Out[158]: 'wrapper'

保留3位有效数字

In [159]:

@decorator

def test():

return random.random()

In [160]:

def decorator(func):

def wrapper(*args,**kwargs):

# do something

return round(func(*args,**kwargs),3)

return wrapper

In [161]:

test()

Out[161]:

0.016931433361564663

保留2位有效数字

In [166]:

@decorator

def test():

return random.random()

@decorator

def test_two():

return random.random()

In [167]:

def decorator(func):

def wrapper(*args,**kwargs):

# do something

return round(func(*args,**kwargs),2)

return wrapper

In [168]: test()

Out[168]: 0.52

In [169]: test_two()

Out[169]: 0.08

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Demoatnes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值