1. 程式人生 > >day10函式進階

day10函式進階

一,函式的引數:

  1.動態引數:

    動態位置引數:*args   

    動態預設值引數**kwargs

      注:1.動態接收引數的時候要注意: 動態引數必須在位置引數後⾯面

        2.順序:  位置引數 >  *args > 預設值引數 > **kwargs

    動態傳參的另一種傳參方式:

        在實參位置上給一個序列,列表,可迭代物件前面加個*表示吧這個順序打散.

        在形參的位置上的*表示吧接收到的引數組合成一個元組

        如果是一個字典,那麼也可以打散,不過需要兩個*

        def fun(*args):    print(args)

        列表

        def fun(*args):   

        print(argslst = [1, 4, 7])

        fun(lst[0], lst[1], lst[2])

        fun(*lst)   # 可以使用*把⼀一個列表按順序打散

        s = "⾂妾做不到"

        fun(*s)     # 字串也可以打散, (可迭代物件)

        字典

        def fun(**kwargs):   

          print(kwargs)

        dic = {'a':1, 'b':2}

        fun(**dic)

        3.函式的註釋

        def chi(food, drink):

        """    這裡是函式的註釋 , 先寫一下當前這個函式是幹什麼的 , 比如我這個函式就是⼀一個吃                   :param :param food: 引數 food 是什麼意思   

         :param :param drink: 引數 drink 是什麼意思    :

        return :return: 返回的是什麼東東   

         """

        print(food, drink)   

        return "very good

二,名稱空間:

  定義:給存放名字和值的關係的空間起⼀一個名字叫: 名稱空間

  1.名稱空間分類:

     1. 全域性名稱空間--> 我們直接在py檔案中, 函式外宣告的變數都屬於全域性名稱空間       

     2. 區域性名稱空間--> 在函式中宣告的變數會放在區域性名稱空間       

     3. 內建名稱空間--> 存放python直譯器為我們提供的名字, list, tuple, str, int這些都是內 置名稱空間

     載入順序:  1. 內建名稱空間>>>>2. 全域性名稱空間>>>>3. 區域性名稱空間(函式被執行的時候)

    取值順序:  1. 區域性名稱空間>>>>2. 全域性名稱空間>>>> 3. 內建名稱空間

  2.作用域:  作用域就是作用範圍, 按照生效範圍來看分為 全域性作用域和區域性作用域   

    全域性作用域: 包含內建名稱空間和全域性名稱空間. 在整個檔案的任何位置都可以使用(遵循 從上到下逐行執行).

    區域性作用域: 在函式內部可以使用.

    作用域名稱空間:         1. 全域性作用域:    全域性名稱空間 + 內建名稱空間        2. 區域性作用域:    區域性名稱空間  

      globals()函式來檢視全域性作用域中的內容, 

      locals()來檢視區域性作 用域中的變數和函式資訊

        a = 10

        def func():   

          a = 40   

          b = 20   

          def abc():       

            print("哈哈")   

          print(a, b)     # 這裡使用的是區域性作用域   

          print(globals())    # 列印全域性作用域中的內容   

          print(locals())     # 列印區域性作用域中的內容

        func()

三,函式的巢狀

  1,只要遇見()就表示函式的呼叫,如果沒有()就不是函式的呼叫

  2.函式的執行順序

       

 四關鍵字:global和nonlocal

   global表示. 不再使用區域性作用域中的內容了了. 而改用全域性作用域中的變數

    a=100

    def func():

      global  a

      a=28

    func()

    print(a)

    結果為28,28

    nonlocal  表示在區域性作用域中,呼叫父級名稱空間中的變數

    a=10

    def func1():

      a=20

      def func2():

        nonlocal a

        a=30

      print(a)

      func2()

      print(a)

    func1()

      結果為 :20,30