鸦鸦 发表于 2018-8-12 14:59:38

Python--闭包与装饰器

  闭包的意义:
  返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得,该函数无论在何处调用,优先使用自己外层包裹的作用域
  #应用领域:延迟计算(原来我们是传参,现在我们是包起来)
  from urllib.request import urlopen
  def index(url):
  def get():
  return urlopen(url).read()
  return get
  baidu=index('http://www.baidu.com')
  print(baidu().decode('utf-8'))
  装饰器:
  装饰器他人的器具,本身可以是任意可调用对象,被装饰者也可以是任意可调用对象。 强调装饰器的原则:
  1 不修改被装饰对象的源代码
  2 不修改被装饰对象的调用方式 装饰器的目标:在遵循1和2的前提下,为被装饰对象添加上新功能
  装饰器其根本就是闭包函数
  装饰器语法
  被装饰函数的正上方,单独一行
  @deco1
  @deco2
  @deco3
  def foo():
  pass
  foo=deco1(deco2(deco3(foo)))
  装饰器补充:wraps
  from functools import wraps
  def deco(func):
  @wraps(func) #加在最内层函数正上方
  def wrapper(*args,**kwargs):
  return func(*args,**kwargs)
  return wrapper
  @deco
  def index():
  '''哈哈哈哈'''
  print('from index')
  print(index.__doc__)
页: [1]
查看完整版本: Python--闭包与装饰器