天天看點

函數

目錄

  • 一.函數文法結構
  • 二.函數的定義與調用(很重要.很重要)
  • 三.函數的分類
  • 函數參數的兩大分類
    • 1.形式參數
    • 2.實際參數
    • 3.形參2種形式
    • 4. 實參2種形式
    • 5.可變長函數
    • 6.函數參數補充(了解)

eg: def 函數名(參數1,參數2):

'''函數注釋'''

函數體代碼

return 傳回值

  1. def(必須的)

    是定義函數的關鍵字

  2. 函數名(必須的)

    是函數的名字 相當于變量名

    函數名的命名規範與風格遵循變量名的

  3. 參數1,參數2(可選的)

    參數可以沒有也可以有多個

    表示在使用函數之前需要滿足的一些條件

  4. 函數注釋(可選的)

    類似于産品說明書

    主要用于介紹函數功能 參數使用 及其他情況

  5. 函數體代碼(必須的)

    函數核心的代碼邏輯(重要)

  6. return傳回值(可選的)

    使用函數之後回報給使用者的結果 可以有也可以沒有

  1. 函數必須先定義後調用(順序不能亂)
  2. 函數在定義階段隻檢測文法不執行代碼
  3. 函數在調用階段才會執行函數體代碼

如何調用函數?

函數名加括号, 如果函數在定義階段有參數則在調用階段也需要給參數

函數在定義與調用階段底層原理

1.在記憶體空間中申請一塊空間存儲函數體代碼

2.将函數體代碼所在的空間位址綁定給函數名

3.函數名加括号則會執行函數體代碼

  1. 内置函數

    python解釋器自帶的(提前給你定義好了 你直接使用即可)

  2. 自定義函數
    • 無參函數

      在函數定義階段括号内沒有寫參數(變量名)

      def my_func():
           print('這個函數很牛逼')
                 
    • 有參函數

      在函數定義階段括号内寫了參數(變量名)

      def my_func(a,b):
           print('這個函數更牛逼')
       my_func(1,2)
                 
    • 空函數

      函數體代碼為空(pass ...)

      def run():
          pass
      def fight():
          pass
      def talk():
          pass
                 
      雖然空函數本身沒有含義 但是空函數可以提前規定好編寫代碼的思路

在函數定義階段括号内所填寫的參數 簡稱"形參"

def func(a, b):
            pass
       	# a和b就是函數func的形參
           

在函數調用階段括号内傳入的參數 簡稱"實參"

func(1,2)
        # 資料1和2就是函數func的實參
           

形參與實參的關系:

我們可以将形參看成是變量名 實參看成是變量值

兩者在函數調用階段臨時綁定 函數運作結束斷開

形參的表現形式隻有一種就是變量名

實參的表現形式有很多種(但是把握核心 就是 資料值)

函數

  • 位置形參

    在函數定義階段括号内按照從左往右的順序依次填入的變量名

    def func(x,y):  # x,y就是位置形參
        pass
               
  • 預設參數

​ 函數在定義階段就可以給形參指派了

​ 1.該形參在函數調用階段如果不給值 則使用預設的

​ 2.該形參在函數調用階段也可以繼續給值 則使用你給的

def func(name, age, gender='male')  # gender='male'就是預設參數
	pass
register('jason', 18)  # 預設參數是可以省略的,這裡預設就是male了
register('lili', 18, gender='female')  # 不省略就指派
           

ps:位置形參與預設值形參在定義的時候

位置形參必須在預設值形參的前面

​ 白話就是:格式越簡單的越靠前 格式越複雜的越靠後

  • 位置實參

    在函數調用階段括号内按照從左往右的順序依次傳入的資料值

    def func(x,y):  # x,y就是位置形參
    	pass
    func(1,2)  # 這裡調用函數1,2就是位置實參
               
  • 關鍵字實參(可以打破位置順序)

    在函數調用階段通過形參名=資料值的形式指名道姓的傳值

    def func(name,age,hobby)
    	print('%s:%s:%s' % (name,age,hobby))
    func(name='jason', hobby= 'read', age=18)  # 這裡就是關鍵字實參 也不是一一對應,打亂了順序
               
    ​ ps:格式越簡單的越靠前 格式越複雜的越靠後

  • 可變長形參
函數

*号在形參中的使用

用于接收多餘的位置參數 并組織成元組的形式指派給*号後面的變量名

**号在形參中的使用

用于接收多餘的關鍵字參數 并組織成字典的形式指派給号後面的變量名

  • 可變長實參
函數

*号在實參中的使用

會将清單、元組内的元素打散成位置參數的形式一一傳值

**号在實參中的使用

會将字典内的鍵值對打散成關鍵字參數傳入

1.命名關鍵字參數
	def register(name,age,*,sex,height):
        pass

    # register('jason',18,'male',183)
    register('lili',18,sex='male',height='1.8m') #正确使用
    """
    sex height在傳入實參的時候必須以關鍵字參數的形式

    ps:該類型的參數幾乎不用 也幾乎很少能碰到
    """