<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 4177字,需瀏覽 9分鐘

           ·

          2022-07-22 10:32

          點擊上方小白學視覺”,選擇加"星標"或“置頂

          重磅干貨,第一時間送達

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

          >>>>

          Python 函數(shù)的定義

              與R語言中定義函數(shù)的function(x)不同的是,Python中使用def語句來定義函數(shù),然后依次寫出函數(shù)名、括號、括號內(nèi)的參數(shù)以及最后不能忘記的冒號,函數(shù)體需另起一行在縮進塊中編寫,最后返回值用return語句執(zhí)行。看一例求絕對值的自編函數(shù):

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

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

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

              另外我們在編寫函數(shù)時也可以對函數(shù)做參數(shù)個數(shù)和參數(shù)類型的檢查,函數(shù)也可以返回多個值,但其本質(zhì)是一個tuple。


          >>>>

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

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

          必選參數(shù):

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

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

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

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

          默認參數(shù):

              當我們重新定義power函數(shù)時,原先的只傳入一個必選參數(shù)的函數(shù)就已經(jīng)失效了,這時候我們就需要默認參數(shù)來幫忙了,將參數(shù)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

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

          可變參數(shù):

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

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

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


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

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

              與可變參數(shù)可以傳入任意個參數(shù)不同的是,關(guān)鍵字參數(shù)可以傳入任意個含參數(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'}

              顯而易見的一點是,關(guān)鍵字參數(shù)增加了函數(shù)的靈活性,除去必選參數(shù)外,用戶可通過關(guān)鍵字參數(shù)輸入任何想要的參數(shù)。和可變參數(shù)類似的是,我們也可以先定義一個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ā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ù)需要一個*作為分隔,*后面的參數(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將會報錯。

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

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


          >>>>

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

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


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


          好消息!

          小白學視覺知識星球

          開始面向外開放啦??????




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

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

          下載3:OpenCV實戰(zhàn)項目20講
          小白學視覺公眾號后臺回復:OpenCV實戰(zhàn)項目20講即可下載含有20個基于OpenCV實現(xiàn)20個實戰(zhàn)項目,實現(xiàn)OpenCV學習進階。

          交流群


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


          瀏覽 27
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  夫妻操逼视频 | 六月色婷婷 | 国产制服丝袜操视频网站 | yy4080午夜一级 | 精品人妻一区二区 |