1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時(shí)間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      Python語法之裝飾器

      裝飾器的概念

      站在用戶的角度思考問題,與客戶深入溝通,找到船營網(wǎng)站設(shè)計(jì)與船營網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站建設(shè)、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、國際域名空間、雅安服務(wù)器托管、企業(yè)郵箱。業(yè)務(wù)覆蓋船營地區(qū)。

      裝飾器是 Python 的一個(gè)重要部分。簡單地說:就是用于拓展原來函數(shù)功能的一種函數(shù),目的是在不改變?cè)瘮?shù)名(或類名)的情況下,給函數(shù)增加新的功能。

      這個(gè)函數(shù)的特殊之處在于它的返回值也是一個(gè)函數(shù),這個(gè)函數(shù)是內(nèi)嵌 “原” 函數(shù)的函數(shù)。

      將函數(shù)作為參數(shù)傳給另一個(gè)函數(shù)

      def yanzheng():

      return "--- 正在驗(yàn)證 ---"

      def login(func):

      print(func())

      print("--- 正在登陸 ---")

      login(yanzheng)

      運(yùn)行結(jié)果:

      --- 正在驗(yàn)證 ---

      --- 正在登陸 ---

      寫代碼要遵循開放封閉原則,雖然在這個(gè)原則是用的面向?qū)ο箝_發(fā),但是也適用于函數(shù)式編程,簡單來說,它規(guī)定已經(jīng)實(shí)現(xiàn)的功能代碼不允許被修改,但可以被擴(kuò)展,即:

      封閉:已實(shí)現(xiàn)的功能代碼塊

      開放:對(duì)擴(kuò)展開發(fā)

      現(xiàn)在你已經(jīng)具備所有必需知識(shí),接下來進(jìn)一步學(xué)習(xí)什么是真正的裝飾器。

      你的第一個(gè)裝飾器

      def func_out(func):

      def func_in():

      print("--- 正在驗(yàn)證 ---")

      func()

      return func_in

      @func_out

      def login():

      print("--- 正在登陸 ---")

      login()

      運(yùn)行結(jié)果:

      --- 正在驗(yàn)證 ---

      --- 正在登陸 ---

      @函數(shù)名稱 是 Python 的一種語法糖。簡而言之,語法糖就是程序語言中提供[奇技淫巧]的一種手段和方式而已。 通過這類方式編寫出來的代碼,即好看又好用,好似糖一般的語法。固美其名曰:語法糖

      裝飾器下面正好是個(gè)函數(shù),則默認(rèn)執(zhí)行:login = func_out(login)

      裝飾器的流程圖

      裝飾有返回值的函數(shù)

      上面的案例,被裝飾的 login() 函數(shù)并沒有返回值,那么接下來咱們看看有返回值的函數(shù)如何裝飾。

      首先,先看第一個(gè)案例:

      def func_out(func):

      def func_in():

      print("--- 正在驗(yàn)證 ---")

      func()

      return func_in

      @func_out

      def login():

      return "--- 正在登陸 ---"

      result = login()

      print(result)

      運(yùn)行結(jié)果:

      --- 正在驗(yàn)證 ---

      None

      思考一下,為什么我調(diào)用 login() 函數(shù),并且使用 result 變量來接收返回值,為什么結(jié)果是 None 呢?

      如果想不明白,就看看第二個(gè)案例:

      def func_out(func):

      def func_in():

      print("--- 正在驗(yàn)證 ---")

      data = func()

      return data

      return func_in

      @func_out

      def login():

      return "--- 正在登陸 ---"

      result = login()

      print(result)

      運(yùn)行結(jié)果:

      --- 正在驗(yàn)證 ---

      --- 正在登陸 ---

      大家仔細(xì)觀察代碼,這兩個(gè)案例有哪些不同?

      發(fā)現(xiàn)了嗎?我在 func_in() 函數(shù)的里面多寫了兩句代碼:

      1、當(dāng)我們調(diào)用被裝飾的 login() 函數(shù)時(shí),實(shí)際執(zhí)行的是 func_in() 函數(shù)的代碼,此時(shí)會(huì)調(diào)用 print() 函數(shù)打印 "--- 正在驗(yàn)證 ---"。 鄭州人流醫(yī)院 http://rl.zyfuke.com/

      2、代碼執(zhí)行到 data = func() 時(shí),會(huì)先執(zhí)行右側(cè)的 func() 函數(shù),而這個(gè)函數(shù)是原始的 login() 函數(shù),所以會(huì) return 返回一個(gè)值,此時(shí)這個(gè)值被等號(hào)左側(cè)的 data 變量接收。

      3、代碼執(zhí)行到 return data,此時(shí)會(huì)將 data 值返回更上一層,而這個(gè)值被 result 變量接收。

      4、最終打印 result 變量就輸出了原始 login() 函數(shù)的值。

      在這里最需要注意的就是 return 返回?cái)?shù)據(jù),只能返回一層函數(shù),多層時(shí),就需要在上層同時(shí)使用 return。

      裝飾有參數(shù)的函數(shù)

      demo1:

      def func_out(func):

      def func_in():

      func()

      return func_in

      def login(a):

      prin

      print(a)

      login(10)

      運(yùn)行結(jié)果:

      10

      demo2:

      def func_out(func):

      def func_in():

      func()

      return func_in

      @func_out

      def login(a):

      print(a)

      login(10)

      運(yùn)行結(jié)果:

      TypeError: func_in() takes 0 positional arguments but 1 was given

      類型錯(cuò)誤:func_in()接受0個(gè)位置參數(shù),但給出了1個(gè)

      demo3:

      def func_out(func):

      def func_in(data):

      func(data)

      return func_in

      @func_out

      def login(a):

      print(a)

      login(10)

      運(yùn)行結(jié)果:

      10

      demo4:

      def func_out(func):

      def func_in(*args,**kwargs):

      func(*args,**kwargs)

      return func_in

      @func_out

      def login(*args,**kwargs):

      print(args)

      print(kwargs)

      login(10,20,c=1,b=2)

      運(yùn)行結(jié)果:

      (10, 20)

      {'c': 1, 'b': 2}

      總結(jié)

      裝飾器函數(shù)只有一個(gè)參數(shù)就是被裝飾的函數(shù)的引用

      裝飾器能夠?qū)⒁粋€(gè)函數(shù)的功能在不修改代碼的情況下進(jìn)行擴(kuò)展

      在函數(shù)定義的上方@裝飾器函數(shù)名 即可直接使用裝飾器對(duì)下面的函數(shù)進(jìn)行裝飾


      當(dāng)前題目:Python語法之裝飾器
      分享網(wǎng)址:http://ef60e0e.cn/article/ghiehp.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        新竹县| 汕头市| 皋兰县| 旅游| 宜都市| 台北市| 平谷区| 巢湖市| 和政县| 达尔| 乌拉特中旗| 瑞安市| 长汀县| 威远县| 龙岩市| 甘南县| 泾源县| 靖安县| 霍州市| 腾冲县| 青阳县| 云阳县| 木里| 涟水县| 营山县| 大新县| 宣化县| 泽州县| 通许县| 锡林浩特市| 时尚| 霸州市| 翁源县| 兰西县| 怀柔区| 德江县| 湖州市| 宿州市| 锡林郭勒盟| 长垣县| 远安县|