Python装饰器用法及原理

Python语言有一个比较Pythonic的功能,也是一个具有很强大功能的特性,那就是装饰器。

1. Python装饰器的原理

Python中的装饰器是通过利用了函数特性的闭包实现的,所以我们需要了解Python闭包的原理,以及函数的功能特性。

1.1 函数特性

  • 函数作为变量传递
def add(x):
	return x+1
a = add(5)
print(a)
#运行结果:6
  • 函数作为参数传递
def add(x):
	return x+1

def execute(f):
	return f(3)

print(execute(add))
#运行结果:4
  • 函数作为返回值
def add(x):
	return x+1

def execute(x):
	return add(x)
	
print(execute(5))
#运行结果:6 
  • 函数嵌套及跨域访问
def outer():
     x = 1
     def inner():
          print(x+1)
     inner()

outer()
#运行结果:2

1.2 闭包原理

闭包其实就是在一个函数中嵌套另一个函数的定义。闭包的作用:包括了外部函数的局部变量,这些局部变量在外部函数返回后也继续存在,并能被内部函数引用。

def fun1():
	x = 1
	def fun2():
		print(x+1)
	fun2()

fun1()
#运行结果:2

1.3 装饰器的功能

闭包的另外一种表现形式,主要用于装饰功能,在不改变原代码以及原代码的调用方式,另外的添加额外的功能,就是对已经存在的某些类进行装饰,以此来扩展或者说增强函数的一些功能。

装饰器功能如下所示:

def func1(x):
     def inner():
          return '一只机智的' + x()

     return inner

@func1
def func2():
      return '小猫'

print(func2())

你可能感兴趣的:(学习笔记)