1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Python:函數(shù)的定義、參數(shù)傳入與函數(shù)的調(diào)用

        共 4177字,需瀏覽 9分鐘

         ·

        2022-07-22 10:32

        點(diǎn)擊上方小白學(xué)視覺(jué)”,選擇加"星標(biāo)"或“置頂

        重磅干貨,第一時(shí)間送達(dá)

            作為計(jì)算機(jī)代碼的一種抽象方式,函數(shù)在Python中扮演了極為重要的角色。本節(jié)介紹Python函數(shù)的定義、參數(shù)的傳入以及調(diào)用方式。其中函數(shù)參數(shù)的傳入方式為本節(jié)重點(diǎn)內(nèi)容。Python函數(shù)的參數(shù)形式包括必選參數(shù)、默認(rèn)參數(shù)、可變參數(shù)、命名關(guān)鍵字參數(shù)以及關(guān)鍵字參數(shù)。五類參數(shù)可單獨(dú)傳入也可組合傳入。

        >>>>

        Python 函數(shù)的定義

            與R語(yǔ)言中定義函數(shù)的function(x)不同的是,Python中使用def語(yǔ)句來(lái)定義函數(shù),然后依次寫(xiě)出函數(shù)名、括號(hào)、括號(hào)內(nèi)的參數(shù)以及最后不能忘記的冒號(hào),函數(shù)體需另起一行在縮進(jìn)塊中編寫(xiě),最后返回值用return語(yǔ)句執(zhí)行??匆焕蠼^對(duì)值的自編函數(shù):

        def f_abs(x):
           if x >=0:
               return x
           else:
               return -x

            當(dāng)然,如果你已經(jīng)通過(guò)pycharm將f_abs保存為abstest.py文件的話,可以通過(guò)cmd在當(dāng)前文件目錄下啟動(dòng)Python然后直接導(dǎo)入函數(shù)模塊來(lái)調(diào)用f_abs函數(shù):

        C:\Users\Administrator>F:
        F:\>cd pythoncode>python
        >>> from abstest import f_abs
        >>> f_abs(-1.0923)
        -1.0923

            另外我們?cè)诰帉?xiě)函數(shù)時(shí)也可以對(duì)函數(shù)做參數(shù)個(gè)數(shù)和參數(shù)類型的檢查,函數(shù)也可以返回多個(gè)值,但其本質(zhì)是一個(gè)tuple。


        >>>>

        函數(shù)的參數(shù)傳入

            函數(shù)參數(shù)傳入的靈活性使得Python函數(shù)十分強(qiáng)大,函數(shù)參數(shù)除了必選參數(shù)之外,還包括默認(rèn)參數(shù)、可變參數(shù)、命名關(guān)鍵字參數(shù)以及關(guān)鍵字參數(shù)。函數(shù)參數(shù)傳遞順序?yàn)楸剡x參數(shù)>默認(rèn)參數(shù)>可變參數(shù)>命名關(guān)鍵字參數(shù)>關(guān)鍵字參數(shù)。

        必選參數(shù):

            先定義一個(gè)求平方的函數(shù):

        def power(x):
           return x*x  
        power(-10)
        100

            可見(jiàn)求平方函數(shù)定義起來(lái)很方便,但如果我們想求x的更高次冪的話,恐怕這個(gè)函數(shù)就得改改了,我們需要兩個(gè)必選參數(shù)才能搞定:

        def power(x,n):
          s = 1
          while n >0:
              n = n-1 
              s = s*x
           return s
        power(10,3)
        1000

        默認(rèn)參數(shù):

            當(dāng)我們重新定義power函數(shù)時(shí),原先的只傳入一個(gè)必選參數(shù)的函數(shù)就已經(jīng)失效了,這時(shí)候我們就需要默認(rèn)參數(shù)來(lái)幫忙了,將參數(shù)n的值定義為默認(rèn)值2:

        def power(x,n=2):
         s = 1
          while n >0:
              n = n-1
              s = s*x
           return s
        >>> power(10)
        100
        >>> power(10,2)
        100

            從上述例子我們可以看出,默認(rèn)參數(shù)的使用可以簡(jiǎn)化函數(shù)的調(diào)用。必選參數(shù)在前,默認(rèn)參數(shù)在后,當(dāng)傳入多個(gè)參數(shù)時(shí),變化大的參數(shù)放前面,變化小的參數(shù)可作為默認(rèn)參數(shù)放后面,最重要的一點(diǎn)是,默認(rèn)參數(shù)必須指向不變對(duì)象!這是設(shè)置默認(rèn)參數(shù)時(shí)需要注意的。

        可變參數(shù):

            我們對(duì)一組數(shù)的平方求和定義一個(gè)函數(shù),即a2+b2+c2+...利用可變參數(shù)我們可以編寫(xiě)函數(shù):

        def jisuan(*numers):
           sum = 0
           for n in numbers:
               sum = sum + n * n
           return sum

            由上面的命令可見(jiàn)可變參數(shù)僅僅需要在參數(shù)前加上一個(gè)*號(hào)就可完成對(duì)其定義,參數(shù)numbers接受的數(shù)據(jù)類型為一個(gè)list或者tuple。當(dāng)我們已有一個(gè)list或者tuple時(shí),我們可以直接將其當(dāng)作可變參數(shù)傳入函數(shù)中去:


        >>> nums = [2,3,5]
        >>> jisuan(*nums)
        38

        關(guān)鍵字參數(shù):

            與可變參數(shù)可以傳入任意個(gè)參數(shù)不同的是,關(guān)鍵字參數(shù)可以傳入任意個(gè)含參數(shù)名的參數(shù),這樣key-value格式顯然是以dict的數(shù)據(jù)類型傳入的。且看示例:

        def player(name,team,**kw):
           print('name:',name,'team:',team,'other:',kw)
        player('Harden','Rockets',city = 'Houston')
        name: Harden team: Rockets other: {'city':'Houston'}

            顯而易見(jiàn)的一點(diǎn)是,關(guān)鍵字參數(shù)增加了函數(shù)的靈活性,除去必選參數(shù)外,用戶可通過(guò)關(guān)鍵字參數(shù)輸入任何想要的參數(shù)。和可變參數(shù)類似的是,我們也可以先定義一個(gè)dict,然后將其作為關(guān)鍵字參數(shù)傳入函數(shù)中去:

        >>> info = {'city': 'Golden states'}
        >>> player('Curry','Worriors',**info)
        name: Curry team: Worriors other: {'city':'Golden states'}

        命名關(guān)鍵字參數(shù):

            通過(guò)關(guān)鍵字參數(shù),我們可以傳入任意不受限制的參數(shù),但如果我們想要限制關(guān)鍵字參數(shù)的名字,可以使用命名關(guān)鍵字參數(shù),例如只接受city和age作為關(guān)鍵字參數(shù),定義方式如下:

        def palyer(name,team,*,city,age):
           print(name,team,city,age)

            命名關(guān)鍵字參數(shù)需要一個(gè)*作為分隔,*后面的參數(shù)均為命名關(guān)鍵字參數(shù),這與關(guān)鍵字參數(shù)的**大不相同。但如果在此之前函數(shù)已有可變參數(shù)的話,再定義命名關(guān)鍵字參數(shù)的話就不需要*作為分隔符了。示例如下:

        def palyer(name,team,*tec,city,age):
           print(name,team,tec,city,age)

            需要注意的是,命名關(guān)鍵字參數(shù)必需連同參數(shù)名一起傳入函數(shù)中,否則的話Python將會(huì)報(bào)錯(cuò)。

        >>> player('Parker','Spurs',city = 'San Antonio',age = 32)
        Parker Spurs San Antonio 32

            需要說(shuō)明的一點(diǎn)是,各類參數(shù)可以組合傳入函數(shù)當(dāng)中,只是需要注意傳入的順序:必選參數(shù)>默認(rèn)參數(shù)>可變參數(shù)>命名關(guān)鍵字參數(shù)>關(guān)鍵字參數(shù)。


        >>>>

        函數(shù)的調(diào)用

            當(dāng)我們定義好函數(shù)后,相應(yīng)的函數(shù)調(diào)用也就十分簡(jiǎn)單了,直接使用函數(shù)名即可完成調(diào)用。當(dāng)然,并不是每個(gè)函數(shù)都需要我們?nèi)プ远x,Python基礎(chǔ)模塊和各類庫(kù)里面內(nèi)置了大量函數(shù),我們可直接調(diào)用,這一點(diǎn)和R也是類似的??磶讉€(gè)Python函數(shù)的例子:


        >>> abs(-0.3)
        0.3
        >>> max(3,0,8,3)
        8
        >>> int(10.24)
        10


        好消息!

        小白學(xué)視覺(jué)知識(shí)星球

        開(kāi)始面向外開(kāi)放啦??????




        下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程
        在「小白學(xué)視覺(jué)」公眾號(hào)后臺(tái)回復(fù):擴(kuò)展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺(jué)、目標(biāo)跟蹤、生物視覺(jué)、超分辨率處理等二十多章內(nèi)容。

        下載2:Python視覺(jué)實(shí)戰(zhàn)項(xiàng)目52講
        小白學(xué)視覺(jué)公眾號(hào)后臺(tái)回復(fù):Python視覺(jué)實(shí)戰(zhàn)項(xiàng)目即可下載包括圖像分割、口罩檢測(cè)、車(chē)道線檢測(cè)、車(chē)輛計(jì)數(shù)、添加眼線、車(chē)牌識(shí)別、字符識(shí)別、情緒檢測(cè)、文本內(nèi)容提取、面部識(shí)別等31個(gè)視覺(jué)實(shí)戰(zhàn)項(xiàng)目,助力快速學(xué)校計(jì)算機(jī)視覺(jué)。

        下載3:OpenCV實(shí)戰(zhàn)項(xiàng)目20講
        小白學(xué)視覺(jué)公眾號(hào)后臺(tái)回復(fù):OpenCV實(shí)戰(zhàn)項(xiàng)目20講,即可下載含有20個(gè)基于OpenCV實(shí)現(xiàn)20個(gè)實(shí)戰(zhàn)項(xiàng)目,實(shí)現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。

        交流群


        歡迎加入公眾號(hào)讀者群一起和同行交流,目前有SLAM、三維視覺(jué)、傳感器、自動(dòng)駕駛、計(jì)算攝影、檢測(cè)、分割、識(shí)別、醫(yī)學(xué)影像、GAN、算法競(jìng)賽等微信群(以后會(huì)逐漸細(xì)分),請(qǐng)掃描下面微信號(hào)加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺(jué)SLAM“。請(qǐng)按照格式備注,否則不予通過(guò)。添加成功后會(huì)根據(jù)研究方向邀請(qǐng)進(jìn)入相關(guān)微信群。請(qǐng)勿在群內(nèi)發(fā)送廣告,否則會(huì)請(qǐng)出群,謝謝理解~


        瀏覽 27
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            好吊操视频这里只有精品 | 国产成人精品视频ⅤA片软件竹菊 | 老师的奶水在线观看 | 日逼网站大全 | 国产美女精品视频国产 | 看三级视频 | 国内一区二区在线观看 | 大香蕉啪啪啪 | 午夜一区二区三区 | 国产亚洲精品电影 |