0
点赞
收藏
分享

微信扫一扫

object专栏 01.函数 03.参数

mafa1993 2022-03-25 阅读 46
python
"""
形参:在定义函数阶段,定义的参数 相当于变量
实参:在调用函数阶段,传入的数据 相当于变量值
调用阶段,实参会将自己指向的内存地址,赋值给形参
调用结束后,解除二者的绑定关系
"""
li = [12, 24, [13, 14]]


def func(para):  # 形参
    for i in para:
        print(i, end=' ')
    print('\r')


func('12,24')  # 实参 --> 数据
func(li)  # 实参 --> 变量
func(str(li))  # 实参 --> 函数的返回值


def add(x, y):
    return x ** y


# 位置实参:按照位置依次传值
res1 = add(2, 8)

# 关键字实参:根据关键字指定传值
res2 = add(y=2, x=8)
print(res1, res2)


# 两种实参可混合使用,位置实参必须放在关键字实参前,不可重复传参
# 形参:在定义函数阶段,定义的参数

# 位置形参:必须被传值,且不可传入更多参数
def add(x, y):
    return x ** y


# 默认参数:
# 在定义函数阶段,就已经被赋值的形参
# 位置形参必须在默认形参的左侧
# 作用:简化调用
def func(para=True):
    if para:
        print('我被默认执行了')
    else:
        print('默认形参被更改了')


func()
func(para=False)
# 在调用函数时,传入实参的值的个数不固定
# 针对溢出的位置实参和关键字实参,必须有对应的形参来接收

# 接收溢出的位置实参
# 其他参数会以元组的形式赋值给args
def func_tuple(x, y, *args):
    print(x + y, args)


func_tuple(1, 2, 3, 4)


# 接收溢出的关键字实参
# 其他参数会以字典的形式赋值给kwargs
def func_dict(name, age, **kwargs):
    print({'name': name, 'age': age}, kwargs)


func_dict('李白', 18, height=170, weight=60)
print('\n')
# *用在实参中 列表
# 先将*后面的值拆分为位置实参
def func_real1(x, y, z):
    print(x, y, z)


func_real1(*[11, 22, 33])


# *用在实参中 字典 将key传入 传列表
def func_real2(x, y, z):
    print(x, y, z)


func_real2(*{'name': '苏轼', 'age': 22, 'height': 170})


# **用在实参中 字典 将key与value传入 传字典 name = '苏轼'
def func_real3(name, age, height):
    print(name, age, height)


func_real3(**{'name': '苏轼', 'age': 22, 'height': 170})
print('\n')

# 必须按照该顺序
# 位置形参 --> 默认形参  --> 可变长度位置形参[接收溢出的位置实参] -->
# 命名关键字形参 --> 可变长度关键字形参[接收溢出的关键字实参]


def func(x, y, z=0, *args, name='苏轼', age, **kwargs):
    # 位置形参
    print(x, y)
    # 12 24

    # 默认形参
    print(z)
    # 0

    # 可变长度位置形参
    print(args)
    # (36, 48)

    # 命名关键字形参:在定义函数时,*后定义的形参
    print(name, age)
    # 苏轼 18

    # 可变长度关键字形参
    print(kwargs)
    # {'height': 170, 'weight': 52}


func(12, *[24, 0, 36, 48], name='李白', **{'age': 18, 'height': 170}, weight=52)
# 命名关键字实参,必须按照key=value的形式传值
# 如果没有设置默认值,则在调用时必须传入值

# 可接收任意参数

def func_out(*args, **kwargs):
    func_in(*args, **kwargs)


def func_in(*args, **kwargs):
    print(args, kwargs)


func_out(*[12, 24], **{'name': 'lili', 'age': 18})
举报

相关推荐

0 条评论