python函数进阶

函数进阶

  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': "wupeiqi@live.com", "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. 函数名可以当作返回值

posted @ 2021-08-10 17:05  wq512  阅读(30)  评论(0编辑  收藏  举报