JavaScript開發(fā)者學(xué)習(xí)Python: 1.2 函數(shù)

  • 定義函數(shù)
    • 在 JavaScript 中 定義函數(shù)使用關(guān)鍵字 function
       function my_ads (x){
         if(x > 0 ){
            return x
         }else{
            return -x
         }
      
    • 在 Python 中 定義函數(shù)使用關(guān)鍵字 def
       def my_ads (x , y = 0 ) {  # 默認(rèn)參數(shù) 同 JavaScript ES6中的默認(rèn)參數(shù)
         if not isinstance(x, (int, float)):  # 規(guī)定必須為整數(shù)或者浮點(diǎn)數(shù)
            raise TypeError('bad operand type')  # 拋出異常
         if x > 0 :
            pass # 占位符 不能為空如果沒想好怎么寫,必須寫個占位符來讓代碼繼續(xù)執(zhí)行下去
         else :
            return -x , y #  Python 中 允許返回多個值, 返回類型為 tuple 
                          #  a,b = (1,2)
                          #  print(a , b)  
                          #  1 2
                          #  在 Python 中 多個變量可以同時接收一個tuple,按位置賦給對應(yīng)的值 , 這點(diǎn)同 JavaScript 中的 ES6 結(jié)構(gòu)賦值類似
       } 
      
  • Python 中 函數(shù)的參數(shù) ( Python 中的 函數(shù)的參數(shù)與 JavaScript 區(qū)別交大,這里只介紹 Python的函數(shù)參數(shù))
    • 可變參數(shù) ( 允許你傳入0個或任意個參數(shù),這些可變參數(shù)在函數(shù)調(diào)用時自動組裝為一個tuple )
      def carl (numbers) : 
          sum = 0
          for n in numbers :
              sum = sum + n * n
          return sum 
      carl([1,2,3]) # 傳遞一個list 返回為 14
      carl((1,2,3)) # 傳遞一個tuple 返回為 14
      
      • 我們把carl 稍加改動讓 參數(shù) numbers 變成一個可變參數(shù) 如下
        def carl (*numbers) : 
          sum = 0
          for n in numbers :
              sum = sum + n * n
          return sum 
        carl(1,2,3) # 14  參數(shù)前面加了一個*號。在函數(shù)內(nèi)部,參數(shù)numbers接收到的是一個tuple,
        carl()      # 0 因此,函數(shù)代碼完全不變。但是,調(diào)用該函數(shù)時,可以傳入任意個參數(shù)
        
      • 同時我們在修改傳入的參數(shù) 如下
        def carl (*numbers) : 
          sum = 0
          for n in numbers :
            sum = sum + n * n
          return sum 
        list = [1,2,3]
        tuple = (1,2,3)
        #------------------分割線------------------
        carl(list) # 報錯
        carl(tuple) # 報錯
        carl(*list) # 14
        carl(*tuple) # 14
        # 下面我們觀察一下 list 與 tuple 加上關(guān)鍵字 * 
        print(*list) # 1 2 3
        print(list) # [1,2,3]
        print(*tuple) # 1 2 3
        print(tuple) # (1,2,3)
        
        • 由此我們得知 關(guān)鍵字 * 放在 變量 list 或 tuple 前, 實際是把所有元素作為可變參數(shù)傳遞進(jìn)去
        • 因此我們函數(shù) carl 又剛好接收的是可變參數(shù),所以我們的必須吧 list 與 tuple 轉(zhuǎn)換成可變參數(shù)傳入函數(shù)中
    • 關(guān)鍵字參數(shù) ( 允許你傳入0個或任意個含參數(shù)名的參數(shù),這些關(guān)鍵字參數(shù)在函數(shù)內(nèi)部自動組裝為一個dict )
      def person(name,age,**km) :
          print('name:',name,'age:',age,'other:',km)
      person('Michael' , 30) # name: Michael age: 30 other:{}
      person('Michael' , 30 , city='BeiJing' , job='Engineer') 
      # name: Michael age: 30 other:{ 'city':'BeiJing' , 'job':'Engineer'}
      
      • 我們在定義一個dict 來傳遞參數(shù)
        def person(name,age,**km) :
            print('name:',name,'age:',age,'other:',km)
         extr = {'city': 'Beijing', 'job': 'Engineer'}
         person('Jack',24,extr ) # 報錯
         person('Jack',24, **extr ) 
         # name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
        
        • **extr 表示吧 extr 這個dict的所有key-value用關(guān)機(jī)子傳輸傳入函數(shù)的**km參數(shù) 這里個km活的是 dict 是extra的拷貝,對km的改動不會影響extr
        • 同可變參數(shù)中的關(guān)鍵字* 同理,只是關(guān)鍵字 * 拆分的是 list 與 tuple 而 **拆分的是 dict
    • 命名關(guān)鍵字參數(shù) (限制關(guān)鍵字參數(shù)的名字)
      def person(name,age,*,city,job):
          print(name,age,city,job)
      person('LiLei',80,city='BeiJing',job='IT') 
      # LiLei 80 BeiJing IT
      
      • 和關(guān)鍵字參數(shù)**km 不同 , 命名關(guān)機(jī)子參數(shù)需要一個特殊分符號* , * 后面的參數(shù)被視為命名關(guān)機(jī)子參數(shù)
      • 如果函數(shù)定義中已經(jīng)有了一個可變參數(shù) , 后面跟著命名關(guān)鍵字參數(shù)就不在需要一個特殊分符號*了。如下
      def person (name ,age , *args , city='BeiJing' , job) :
          print(name,age,args,city,job)
      person ('LingDa' , 28, ('參數(shù)1', '參數(shù)2' , '參數(shù)3') , 'ShangHai' , 'IT')
      # 報錯   命名關(guān)鍵字參數(shù)必須傳入?yún)?shù)名,這和位置參數(shù)不同。如果沒有傳入?yún)?shù)名,調(diào)用將報錯
      person ('LingDa' , 28, ('參數(shù)1', '參數(shù)2' , '參數(shù)3') , city='ShangHai' , job = 'IT')
      # LingDa 28 (('參數(shù)1', '參數(shù)2', '參數(shù)3'),) ShangHai IT
      person ('LingDa' , 28, ('參數(shù)1', '參數(shù)2' , '參數(shù)3')  , job = 'IT')
      # LingDa 28 (('參數(shù)1', '參數(shù)2', '參數(shù)3'),) BeiJing IT
      
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容