函式的呼叫方式和引數

zenopan發表於2024-04-12

def func(x,y):
.....

func(19,20) # 直接呼叫
new=func(19,30) # 表示式呼叫
def delete(a,b):
return func(a,b) #作為返回值呼叫

函式的引數

  • 按功能分和位置分

    • 形參def func(x,y)這裡的:x,y
      • 需要在函式呼叫時傳遞進去
      • 只在函式內部生效
    • 實參func(8,9) 這裡的:8,9
      • 呼叫函式時放進去的實際值
      • 可以按位置或關鍵字傳遞
      • 可以使表示式,常量,變數
  • 按位置傳參情況

    • 有位置,不傳引數,報錯
    • 沒有位置,多傳引數,報錯
    • 位置引數必須按位置傳遞值,換位置就會導致函式內的引數錯位
  • 按關鍵字傳參情況

    • 關鍵字傳遞引數時,要指定函式定義時的位置引數

    • 允許按位置傳遞引數

    • 允許不按位置傳遞

    • 可以混合用,混用時位置引數必須放關鍵字前面

    • 預設引數可以不給值,不傳值就是預設值,傳值就用傳遞的值,必須放在最後

    • 順序:

    • 位置引數>關鍵字引數>預設引數
      

可變長位置引數

  • 定義:*args

  • 作用:解決多傳位置引數問題

    • 可以用一個變數解決超出指定引數個數的引數,

    • 用元組接收

    • 放在預設引數後面

    • 關鍵字是*

    • *是解包語法

    • print(*'dream')
      輸出:
      d r e a m
      
  • def func(x,y,z='',*args)

可變長關鍵字引數

  • **kwargs
  • 接收多餘的關鍵字傳參
  • 放在*arg後面
  • 返回字典
  • 字典可以用*解包,得到所有key
  • 字典不能用**解包

命名關鍵字引數

  • def fun(x,y,z='',*,a,b)
    
  • *前引數可以使用位置傳參或者關鍵字傳參,但是 **之後的引數必須按照關鍵字傳遞

  • *後面的引數,預設引數允許放在位置引數之前

  • 不能跟*args,或者**kwargs 連用

混合使用

  • 順序
  • 位置>預設>*args>**kwargs

型別提示

  • optional 語法

  • 註解:定義函式時指定引數型別

  • 基本資料型別註解:在形參後(:型別)

    • 不可變:是一種弱型別約束,是建議,不強制

      • 字串def fun(name:str)
      • 數字 def fun(name:int)
    • 可變from typing import Dict,List,Tuple,Set

      • 列表

      • 字典

        • from typing import Dict
          def func(x:Dict[str,int]) x是個字典引數,期待鍵是str,值是int
          
      • 元組

      • 集合

    • 約束函式返回值型別

    • def func(x,y)-->int #約定返回值為int型別
      	return 
      
    • from typint import Uion
      def func(x,y)-->Uion[int,str ]#約定返回值為int型別或者str
      	return
      
    • #返回可選引數型別
      from typing import Optional
      def func(x,y)->Optional[int]
      

相關文章