函数参数
实参传递方式argument
"""
函数参数
实际参数:调用者以何种方式传递数据
位置实参
-- 序列实参
关键字实参
-- 字典实参
"""
def func01(p1, p2, p3):
print(p1)
print(p2)
print(p3)
# 1. 位置实参:位置
func01(1, 2, 3)
list01 = ["a", "b", "c"]
# 2. -- 序列实参:拆
func01(*list01)
# dict01 = {"悟空":2,"唐三藏":3,"春光灿烂猪八戒":7}
# func01(*dict01)# 之传入key,所以没有意义
# 3. 关键字实参:名字
func01(p3=2, p1=1, p2=3)
# 4. -- 字典实参:拆
dict01 = {"p3": "c", "p1": 1, "p2": "b"}
func01(**dict01)
"""
函数内存分配
"""
# 将函数创建的代码加载到内存中(代码区)
# 备注:函数不执行
def func01():
a = 1000
# 调用函数在内存中开辟空间(栈帧)
# 备注:存储在函数内部创建的变量
func01()
# 函数执行后栈帧销毁
# 结论:
# 不可变类型的数据传参时,函数内部不会改变原数据的值。
# 可变类型的数据传参时,函数内部可以改变原数据。
def func02(p1,p2):
# 修改栈帧中变量存储的地址
p1 = 100
# 修改列表第一个元素存储的地址
p2[0] = 200
a = 10 # 不可变对象
b = [20] # 可变对象
# 将变量a,b存储的数据地址传入函数
func02(a,b)
print(a)# 10
print(b)# [200]
"""
形式参数:约束实参
默认形参:可选
位置形参:必选
星号元组形参:合(位置实参)
命名关键字形参:强制使用关键字实参
双星号字典形参:合(关键字实参)
练习:exercise08/09
"""
# 1. 位置形参:必选
def func01(p1, p2, p3):
print(p1)
print(p2)
print(p3)
# 2. 默认形参:可选
def func02(p1=True, p2="", p3=0):
print(p1)
print(p2)
print(p3)
func02()
func02(False, "a", 10)
func02(p2="A")
func02(False, p3="C")
# 3. 星号元组形参: 合(位置实参)
# 备注:以args命名(不叫p1)
def func03(*p1):
print(p1)
func03()
func03(34, 4, 5, 6, 7, 8)
list01 = [43, 54, 5, 6]
func03(*list01) # 拆
# func03(a =