1. 程式人生 > 其它 >LeetCode226|劍指Offer27.二叉樹的映象

LeetCode226|劍指Offer27.二叉樹的映象

函式進階

  1. 函式執行傳參時,傳遞的是記憶體地址

  2. 淺拷貝是拷貝的記憶體地址 深拷貝是拷貝的記憶體地址

  3. 函式的返回值是記憶體地址

    def func():
         data = [11, 22, 33]
         return data
     ​
     v1 = func()
     print(v1) # [11,22,33]

    上述程式碼的執行過程:

    • 執行func函式

    • data = [11, 22, 33] 建立一塊記憶體區域,內部儲存[11,22,33],data變數指向這塊記憶體地址。

    • return data 返回data指向的記憶體地址

    • v1接收返回值,所以 v1 和 data 都指向

      [11,22,33] 的記憶體地址(兩個變數指向此記憶體,引用計數器為2)

    • 由函式執行完畢之後,函式內部的變數都會被釋放。(即:刪除data變數,記憶體地址的引用計數器-1)

    所以,最終v1指向的函式內部建立的那塊記憶體地址。

  4. 函式名其實就是一個變數,代指函式。

  5. 函式同時也可被雜湊,所以函式名通知也可以當做 集合的元素、字典的鍵。

    點選檢視程式碼
    def send_msg(mobile, content):
         """傳送簡訊"""
         pass
     ​
     ​
     def send_email(to_email, subject, content):
         """傳送圖片"""
         pass
     ​
     ​
     def send_wechat(user_id, content):
         """傳送微信"""
         pass
     ​
     ​
     func_list = [
         {"name": send_msg, "params": {'mobile': "15131255089", "content": "你有新短訊息"}},
         {"name": send_email, "params": {'to_email': "[email protected]", "subject": "報警訊息", "content": "硬碟容量不夠用了"}},
         {"name": send_wechat, "params": {'user_id': 1, 'content': "約嗎"}},
     ]
     ​
     #  {"name": send_msg, "params": {'mobile': "15131255089", "content": "你有新短訊息"}},
     for item in func_list:
         func = item['name'] # send_msg
         param_dict = item['params'] # {'mobile': "15131255089", "content": "你有新短訊息"}
         func(**param_dict) # send_msg(**{'mobile': "15131255089", "content": "你有新短訊息"})
  6. 將函式名賦值給其他變數時,變數指的是函式,函式和變數都能被執行;

    函式名被賦值後,函式不能被執行,函式名是被賦值的變數

    函式名不能於系統函式同名

  7. 函式名可以當作返回值

本文來自部落格園,作者:王奇512,轉載請註明原文連結:https://www.cnblogs.com/wangqi512/p/15124797.html