python学习基础第一阶段day08

函数内存分配:

"""
    函数内存分配
"""

# 将函数创建的代码加载到内存中(代码区)
# 备注:函数不执行
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]

作用域:

"""
    作用域
        局部
        全局
"""

# 全局作用域:整个文件都可以使用
g01 = "a"
def func01():
    # 局部作用域:函数内部可以使用
    a = 100
    print(g01)# 可以读取全局变量

def func02():
    # 在局部作用域创建了变量g01(没有修改全局变量)
    # g01 = "b"
    global g01 # 声明变量
    g01 = "b"
    global g02 # 特别不建议
    g02 = "c"

func01()
func02()
print(g01)# ?
print(g02)# ?

函数参数:

实际参数:

"""
    函数参数
        实际参数:调用者以何种方式传递数据
            位置实参
                -- 序列实参
            关键字实参
                -- 字典实参
"""


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)

形式参数:

"""
    形式参数:约束实参
        默认形参:可选
        位置形参:必选
            星号元组形参:合(位置形参)
        关键字形参:强制使用关键字实参
            双星号字典实参:合(关键字形参)

"""


# 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, 5, 6, 7, 8)
list01 = ["a", "b", "c"]
func03(*list01)


# func03(a=1, b=2)

# 4.命名关键字形参:必须使用关键字形参
# 星号后面的位置形参是命名关键字形参
def func04(p3, *args, p1=0, p2=1):
    print(p3)
    print(args)
    print(p1)
    print(p2)


func04(1, 2, 3, p1=2, p2=3)


# p1 位置形参  p2 命名关键字形参
def func05(p1, *, p2):
    print(p1)
    print(p2)


print(func05(1, p2=5))
print(func05(p1=1, p2=5))


# 5.双星号字典形参:合(关键字实参)
# # 备注:以args命名(不叫p1)
def func06(**kwargs):
    print(kwargs)


func06()
func06(a=1, b=2, c=3)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值