python函数进阶
-
函数执行传参时,传递的是内存地址
-
浅拷贝是拷贝的内存地址 深拷贝是拷贝的内存地址
-
函数的返回值是内存地址
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指向的函数内部创建的那块内存地址。
-
-
函数名其实就是一个变量,代指函数。
-
函数同时也可被哈希,所以函数名通知也可以当做 集合的元素、字典的键。
点击查看代码
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": "你有新短消息"})
-
将函数名赋值给其他变量时,变量指的是函数,函数和变量都能被执行;
函数名被赋值后,函数不能被执行,函数名是被赋值的变量
函数名不能于系统函数同名
-
函数名可以当作返回值
本文来自博客园,作者:wq512,转载请注明原文链接:https://www.cnblogs.com/wangqi512/p/15124797.html