25 函数总结 重点
总结
- 自定义函数
- 基本函数结构(98%)
- 高级
- 参数
- 闭包
函数的参数传递的是什么?
【内存地址=引用 or 值】
v = [11,2,33,4]
def func(arg):
print(id(arg)) # 列表内存地址
print(id(v)) # 列表内存地址
func(v)
# 传递的是内存地址。
*args和**kwargs的作用
-
返回值
-
常见数据类型可以返回
-
函数也可以返回
def func(): def inner(): pass return inner v = func()
-
特殊
- 默认没返回就是None
- return 1,2,3 等价于 return (1,2,3,4,)
执行函数
-
函数不被调用,内部代码永远不执行。
def func(): return i func_list = [] for i in range(10): func_list.append(func) print(i) # 9 v1 = func_list[4]() v2 = func_list[0]()
func_list = [] for i in range(10): # func_list.append(lambda :x) # 函数不被调用,内部永远不执行(不知道是什么。) func_list.append(lambda :i) # 函数不被调用,内部永远不执行(不知道是什么。) print(func_list) func_list[2]()=
执行函数时,会新创建一块内存保存自己函数执行的信息 => 闭包
def base(): return i def func(arg): def inner(): return arg return inner base_list = [] # [base,base,] func_list = [] # [由第一次执行func函数的内存地址,内部arg=0 创建的inner函数,有arg=1的inner函数 ] for i in range(10): # i = 0 ,1 base_list.append(base) func_list.append(func(i)) # 1. base_list 和 func_list中分别保存的是什么? """ base_list中存储都是base函数。 func_list中存储的是inner函数,特别要说的是每个inner是在不同的地址创建。 """ # 2. 如果循环打印什么? for item in base_list: v = item() # 执行base函数 print(v) # 都是9 for data in func_list: v = data() print(v) # 0 1 2 3 4
-
总结:
- 传参:位置参数 > 关键字参数
- 函数不被调用,内部代码永远不执行。
- 每次调用函数时,都会为此次调用开辟一块内存,内存可以保存自己以后想要用的值。
- 函数是作用域,如果自己作用域中没有,则往上级作用域找。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)