Python 中 @装修器的用法简单介绍

在这里主要是想介绍下,Python中的@装饰器。这里就直接举几个例子来说明一下(主要是为了使自己不要太容易忘掉这个@的简单的用法)。
首先,举个最简单的例子:

				def log(func):
					print "start %s" %func
				@log
				def func_a():
					print "this is the function of a"

这个代码,如果运行起来的话,运行结果如下所示:

			start <function func_a at 0x7f33e59b3668>

这里如果按照一般的解读的话,会发现出来一个@运算符,然后我就自行忽略掉这个不常见的符号,接下来又是一个函数的定义,整个代码中没有任何执行函数的代码,可是运行的时候,却出现结果了?为什么会这样?主要是因为@运算符的原因。@运算符,这里叫做装饰器,它表示的意思是:

			func_a = log(func_a)

也就是说:@运算符后边的变量log是一个函数对象。然后@log后边的func_a函数,是作为log的形参的。所以@log,就是执行了log(func_a)这个函数,所以就打印了上面结果的输出。
接下来讲一个比较实用的代码,也就是为了在每次函数执行的时候,都打印一些比较基础log的信息:

1 #-*- coding: utf-8 -*-
  2 def log(func):
  3     def wrapper(*arg,**kw):
  4         print"Start%s"%func
  5         print arg
  6         print kw
  7     return wrapper
  8 @log
  9 #@log 这个等价于
 10 #   func_a = log(func_a)
 11 #然而这里需要注意的是log返回的函数是wrapper
 12 #所以这里的func_a = log(func_a) = wrapper
 13 #所以这里的func_a函数就是现在的wrapper函数了!
 14 #所以你执行func_a的时候就得是执行wrapper了,因为现在func_a
 15 #就是wrapper函数了,可以理解为引用!
 16 def func_a():
 17     print"This is the function a"
 18 @log
 19 def func_b(arg):
 20     print"this is the function b"
 21 func_a((1,2,3),name="hello")

这里的关于@的解释,在代码中也详细的解释了。但是一定要记住@这个装饰器表示的是:@后边跟的变量名为被调用的函数,@后边定义的函数,作为被调用函数的一个形参。然后作为形参的函数作为左值运算对象,作为@后边变量的函数作为右值。也就是这个公式:

			function_1(func)
			@function_1
			function_2()
			@function_1表示的意思就是function_2=function_1(function_2)

在这里还需要解释的一点是:function_1()和function_1是两个不一样的东西,function_1()表示的是调用function_1这个函数;而function_1表示的是function_1这个函数,不会调用这个函数,可以作为赋值运算符的右值对象!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值