1. 程式人生 > >閉包和裝飾器

閉包和裝飾器

裝飾器 urn turn func 就是 在外 嵌套 調用 CA

#閉包
叫什麽閉包
有什麽用:在執行函數的時候可以在外部函數中保留參數在內存中
寫法:兩個函數的嵌套,外部函數返回內部函數的引用,外部函數必須有參數
def 外部函數(參數):
  def 內部函數():
    pass
  return 內部函數

###nonlocal這個就是修改外部參數的值

# 裝飾器
1. 先寫一個萬能裝飾器
def set_fun(func):
  def call_fun(*args,**kwargs):
    return func(*args,**kwargs)
  return call_fun

2. 在要裝飾的函數上寫一個@xxx

@set_fun
def test():
  print("test")


# 裝飾器有結論
裝飾前的test函數是由func指向的
裝飾後的test其實就是call_fun
道德上裝飾不會去更改原先函數的返回值及調用方式
func,裝飾前的test,call_fun三個參數必須一致

# 兩個裝飾器裝飾一個函數
能夠說出執行的結果,秋褲大法跟電梯

# 裝飾器傳參
三個函數的嵌套,第三層函數返回閉包的外層的引用,第三層必須有參數
def set_args(args);
  def set_fun(func):  
    def call_fun(*args,**kwargs):
      return func(*args,**kwargs)
    return call_fun
  return set_fun

@set_args("xxx")
def test():
  printl("xxxxxx")

閉包和裝飾器