函数的参数知识点
目录
-
函数参数的两大分类
-
位置参数与关键字参数
-
默认参数
-
可变长参数(重点)
-
其他函数参数补充(了解)
-
名称空间的概念
- 形式参数
在函数定义阶段括号内所填写的参数 简称"形参"
123def
func(a, b):
pass
# a和b就是函数func的形参
-
实际参数
在函数调用阶段括号内传入的参数 简称"实参"12func(
1
,
2
)
# 数据1和2就是函数func的实参
"""
形参与实参的关系
我们可以将形参看成是变量名 实参看成是变量值
两者在函数调用阶段临时绑定 函数运行结束断开
形参的表现形式只有一种就是变量名
实参的表现形式有很多种(但是把握核心 就是 数据值)
"""
位置参数
-
位置参数
按照从左往右的顺序依次填入的参数 - 位置形参
在函数定义阶段括号内按照从左往右的顺序依次填入的变量名 - 位置实参
在函数调用阶段括号内按照从左往右的顺序依次传入的数据值
1 2 3 4 5 6 7 8 9 10 11 | # 定义一个可以比较大小的函数(传入两个值 返回较大的) def my_max(a, b): print (a, b) if a > b: return a else : return b res = my_max( 1 , 2 ) print (res)<br><br> |
# 关键字实参
my_max(b=1, a=2) # 关键字参数
通过形参名=变量值的形式传递
'''
位置形参和位置实参的关系:
位置实参从左往右依次传递给位置实参(一一对应)
'''
格式越简单的越靠前 格式越复杂的越靠后
默认参数
1 2 3 4 | 默认形参: 在函数定义阶段,两种情况: 1. 如果你没有给形参传递值,就使用默认的 2. 如果你给形参传递了值,就使用你给的 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # 定义学员注册功能 def register(name, age, gender = 'male' ): print ( '%s:%s:%s' % (name, age, gender)) register( 'jason' , 18 ) register( 'tony' , 28 ) register( 'kevin' , 38 ) register( 'lili' , 18 , 'female' ) register( 'lili' , 18 , gender = 'female' ) """ 函数在定义阶段,已经把值固定死了 变量名与变量值在内存中的关系判断 位置形参与默认值形参在定义的时候 位置形参必须在默认值形参的前面 """ '''格式越简单的越靠前 格式越复杂的越靠后''' |
可变长参数
- 函数无论传入多少位置参数都可以正常运行
123456789可变长形参
def
func(x,y,
*
a):
print
(x,y,a)
func()
# ()
func(
1
)
# (1,)
func(
1
,
2
,
3
,
4
,
5
,
6
,
7
)
# (1, 2, 3, 4, 5, 6, 7)
func(
1
,
2
)
# 1 2 ()
func(
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
)
# 1 2 (3, 4, 5, 6, 7, 8, 9)
func(
1
,
2
)
# 1 2 (3, 4, 5, 6, 7, 8, 9)
*号在形参中的使用
用于接收多余的位置参数 并组织成元组的形式赋值给*号后面的变量名 - 函数无论传入多少关键字参数都可以正常运行
123456def
index(x, y,
*
*
b):
print
(x, y, b)
index()
# {}
index(a
=
1
,b
=
2
,c
=
3
,d
=
4
)
# {'a': 1, 'b': 2, 'c': 3, 'd': 4}
index(y
=
2
, x
=
1
)
# 1 2 {}
index(y
=
2
, x
=
1
, u
=
222
, k
=
111
, l
=
444
)
# 1 2 {'u': 222, 'k': 111, 'l': 444}
**号在形参中的使用
用于接收多余的关键字参数 并组织成字典的形式赋值给**号后面的变量名
""" - 定义一个函数无论传入多少位置参数和关键字参数都可以正常运行
123456
def
index(
*
a,
*
*
b):
print
(a,b)
index()
# () {}
index(
1
,
2
,
3
,
4
)
# (1, 2, 3, 4) {}
index(a
=
1
,b
=
2
,c
=
3
)
# () {'a': 1, 'b': 2, 'c': 3}
index(
1
,
2
,
3
,
4
,a
=
1
,b
=
2
,c
=
3
)
# (1, 2, 3, 4) {'a': 1, 'b': 2, 'c': 3}
可变长形参 *与**后面的变量名其实是可以随便定义的
但是python中推荐使用
*args
**kwargs
def index(*args, **kwargs):
pass123456789101112131415161718192021222324# *号和**号在实参中的使用:
def
index(a, b, c):
# print(args)
print
(a, b, c)
# l = [11, 22, 33]
t
=
(
11
,
22
,
33
)
# index(l)
# index(l[0], l[1], l[2]) # index(11, 22, 33)
# index(*l) # index(11, 22, 33)
'''**号在实参中的使用'''
def
func(username, password):
print
(username, password)
d
=
{
'username'
:
'jason'
,
'password'
:
222
}
# func(d['x'], d['y'])
func(
*
*
d)
# func(username='jason',password=222)
func(username
=
'jason'
, password
=
222
)
名称空间
- 什么是名称空间(namespaces)
用于存放变量名与变量值绑定关系的地方(类似于民政局)- 名称空间的分类
1.内置名称空间
python解释器提前给你定义好的
print()
len()
.. -
全局名称空间
在py文件中顶格编写的代码运行之后都会存入全局名称空间
name = 'jason' # name全局
def func(): # func全局
pass
if 1:
a = 123 # a全局
for i in range(10):
print(i) # i全局
while True:
a = 123 # a全局 -
.局部名称空间
函数体代码运行之后产生的都是局部名称空间
- 名称空间的分类
-
存活周期
1.内置名称空间
python解释器启动与关闭而创建和销毁
2.全局名称空间
随着py文件的运行与结束而创建和销毁
3.局部名称空间
随着函数体代码的执行与结束而创建和销毁
名字的查找顺序
在查找名字的时候 要先确定自己当前在哪
1.如果你在局部
局部 >>> 全局 >>> 内置
2.如果你在全局
全局 >>> 内置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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() |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人