Python进阶(八)编写带参数decorator_python 带参数的 decorator(1)

最后前端到底应该怎么学才好?

如果你打算靠自己摸索自学,那么你首先要了解学习前端的基本大纲,这是你将要学习的主要内容,理解以及掌握好这些内容,便可以找到一份初级的前端开发工作。你还需要有一套完整的前端学习教程,作为初学者最好的方式就是看视频教程学习,初学者容易理解接受。

不要选择买书学习,这样的方式没有几个人能学会,基本都是看不下去书,也看不懂书。如果喜欢看书的学弟,可以买一些经典的书籍作为辅助即可,主要还是以看教程为主。每天抽出固定几个小时学习,做好长期学习的准备。学习编程并不是每天光看视频,你学习编程最重要的目的是为了编写软件产品,提供给大众使用,所以用手写出代码实现功能才是我们要做的事情。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

my_func = log(‘DEBUG’)(my_func)


上面的语句看上去还是比较绕,再展开一下:



log_decorator = log(‘DEBUG’)
my_func = log_decorator(my_func)


上面的语句又相当于:



log_decorator = log(‘DEBUG’)
@log_decorator
def my_func():
pass


所以,带参数的log函数首先返回一个decorator函数,再让这个decorator函数接收my\_func并返回新函数:



def log(prefix):
def log_decorator(f):
def wrapper(*args, **kw):
print ‘[%s] %s()…’ % (prefix, f.name)
return f(*args, **kw)
return wrapper
return log_decorator

@log(‘DEBUG’)
def test():
pass
print test()


执行结果:



[DEBUG] test()…


对于这种3层嵌套的decorator定义,你可以先把它拆开:



标准decorator:

def log_decorator(f):
def wrapper(*args, **kw):
print ‘[%s] %s()…’ % (prefix, f.name)
return f(*args, **kw)
return wrapper
return log_decorator

返回decorator:

def log(prefix):
return log_decorator(f)


拆开以后会发现,调用会失败,因为在3层嵌套的decorator定义中,最内层的wrapper引用了最外层的参数prefix,所以,把一个闭包拆成普通的函数调用会比较困难。不支持闭包的编程语言要实现同样的功能就需要更多的代码。


在@performance实现打印秒的同时,请给 @performace 增加一个参数,允许传入’s’或’ms’:



@performance(‘ms’)
def factorial(n):
return reduce(lambda x,y: x*y, range(1, n+1))


要实现带参数的@performance,就需要实现:



my_func = performance(‘ms’)(my_func)


需要3层嵌套的decorator来实现。  
 参考代码:


### 最后前端到底应该怎么学才好?

如果你打算靠自己摸索自学,那么你首先要了解学习前端的基本大纲,这是你将要学习的主要内容,理解以及掌握好这些内容,便可以找到一份初级的前端开发工作。你还需要有一套完整的前端学习教程,作为初学者最好的方式就是看视频教程学习,初学者容易理解接受。



不要选择买书学习,这样的方式没有几个人能学会,基本都是看不下去书,也看不懂书。如果喜欢看书的学弟,可以买一些经典的书籍作为辅助即可,主要还是以看教程为主。每天抽出固定几个小时学习,做好长期学习的准备。学习编程并不是每天光看视频,你学习编程最重要的目的是为了编写软件产品,提供给大众使用,所以用手写出代码实现功能才是我们要做的事情。

**[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.youkuaiyun.com/forums/4304bb5a486d4c3ab8389e65ecb71ac0)**

![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/4ca185a40a4f6eac37de401831294f15.jpeg#pic_center)  

![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/22cc597411613c6c713ecbdff247e2b6.jpeg#pic_center)



![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/ac182effbdb5915dfbd908d9ae101ff2.jpeg#pic_center)

![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/550659059749365655787c6c04beb595.jpeg#pic_center)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值