python中函数的参数以及名称空间
- 位置参数和关键字参数
- 默认参数
- 可变长参数(重点)
函数参数的两大分类
形参 和 实参
形参:在函数定义中从左向右写入的变量名就叫做形式参数,简称 形参
下图中的a 和 b 就是形参
实参:在函数调用阶段从左往右依次写入的变量值就叫实际参数,简称 实参
下图中的 1 和 2 就是实参
形参和实参相当于 变量名 和 变量值。
变量名 与 变量值 在函数调用阶段 临时调用,函数运行结束之后,则断开立马断开连接
## 注意点:
# 形参的表现形式就一种
# 实参的表现形式有多种
位置参数 和 关键字参数
位置参数:
# 从左往右依次写入的数据就是位置参数
位置形参
# 在定义函数的时候,从左往右依次写入的变量名就是位置形参(如下图中的 a b)
位置实参
# 在函数调用阶段,从左往右依次写入的变量值就是位置实参(调用函数func()时,输入的1,2)
关键字参数:
下午中的a , b 就是关键字
'''
位置形参和位置实参的关系:
位置实参从左往右依次传递给位置实参(一一对应)
'''
默认参数
在定义函数阶段,分两种情况:
1.如果没有给形参传递值,那就使用默认的
2.如果给形参传递了值,那就用传递的值
3.默认参数只要不放在 **kwargs 后面都可以
下图中 a 和 b 传了 实参 1 和 2 ,C没有传值,那就是默认9,如果传了值,那就用上传的值
可变长参数
1 无论在函数调用阶段,传多少个参数都可以, *args(*号后面可以为任意,args是python中约定促成的规定)输出的结果是元祖,如下图
2 无论我在函数调用阶段传递多少个 关键字实参 都可以。函数中以**kwargs(同样只是约定俗成)
**kwargs 输出的结果 是 字典(把多余的关键字参数赋给了**号后面的变量名)
3 无论我在函数调用阶段传递多少个位置参数和关键字参数都可以,如下图
组合使用
综上所述所有参数可任意组合使用,但定义顺序必须是:位置参数、默认参数、*args、命名关键字参数、**kwargs
位置实参1被*接收,以元组的形式保存下来,赋值给args,即args=(1,),关键字实参z=3,y=2被**接收,以字典的形式保存下来,赋值给kwargs,即kwargs={‘y’: 2, ‘z’: 3}
然后再启用func(),得到结果1,2,3
名称空间的概念
1. 什么是名称空间?
就是绑定变量名和变量值的地方
2. 名称空间的分类:
-1 内置名称空间
在python解释器中
len()
print()
open()
-2 全局空间名称
靠边定格写的名称,是全局空间名称
-3 局部名称空间
# 在函数体中存在的都是局部的
# 局部名称空间的嵌套: def f1(): # x = 222 def f2(): # x = 333 def f3(): # x = 444 def f4(): # x = 555 def f5(): # x = 666 print(x) f5() f4() f3() f2() f1()
拓展面试题
下图中输出的结果,是什么,原理又是什么
输出结果中,其中 z 值 是之前的100
原理: a初始指向的内存地址上的数据是100,即a = 100
通过z 重新赋值之后,z同样指向100的内存地址,即z = 100(这里相当于成了默认参数) 和 a = 100
函数func内部,对 a 重新赋值之后,a 指向一个新的内存地址200
所以,输出的结果,是 1,2,100和 200
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能