python全栈——函数参数的使用

二、形参与实参的具体使用

# 2.1、位置参数:在函数定义阶段,按照从左到右的顺序依次定义的参数称之为位置参数
# 位置形参:按照从左到右的顺序直接定义的"变量名"
#     特点:吸引被传值,多一个不行少一个不行
def func(x, y):
    print(x, y)


# 位置实参:按照从左到右的顺序依次传入的值
#     特点L按照顺序与形参一一对应
func(1, 2)

# ==================================================
# 2、2关键字参数
def func(x, y):
    print(x, y)
# 关键字实参:在调用阶段,按照key=value的形式传入的值
#   特点:指名道姓给某个形参传值,可以完全不参照顺序
# foo(y=222,x=111)

# 混合使用,强调
# 1、位置实参必须放置关键字实参前
func(1, y=2)
# 2、不能为同一个形参重复传值
# func(1, y=2, x=2)
# ==================================================
# 2.3、默认参数
# 默认形参:在定义函数阶段吗,就已经被赋值的形参,称之为默认参数
#     特点:在定义阶段就已经被赋值,意味着在调用阶段可以不用为其赋值(但是还是可以改)

# 位置形参与默认形参的混用
# ①、位置形参必须要在默认形参的左边
def func(x, y=1):
    print(x, y)


# ②、默认参数的值是在函数定义阶段被赋值的,准确地说被赋值的内存地址
m = [111, ]


# ③、虽然默认值可以被指定为任意数据类型,但不推荐使用可变类型(变量)
# 函数理想状态:函数的调用只跟函数的本身有关系,不受外界代码的影响
def fooo(x, y, z, l=None):
    if l is None:
        l = []
    l.append(x)
    l.append(y)
    l.append(z)
    print(l)

函数参数总结:在这里插入图片描述

2.4、可变长度的参数(*与**的用法)

# 可变长度指的是再调用函数时,传入的值(实参)的个数不固定
# 而实参是用来为形参赋值的,所有对应着,针对溢出的实参必须有对应的形参来接受

# 2.4.1、可变长度的位置参数
# ①:*形参名:用来接受溢出的位置实参,溢出的位置实参会被*保存成元组的格式,然后赋值紧跟其后
#         *后跟的可以是任何名字,规范名为args
def func(x, y, *args):  # args = (3,4,5,6)
    print(x, y, args)


func(1, 2, 3, 4, 5, 6)


# ②:*可以用在实参中,实参中带*,将*后的值打散成位置实参
def func(x, y, z):
    print(x, y, z)


print(*[11, 22, 33])  # func(11,22,33)


# ③:形参与实参中都带*
def func(x, y, *args):  # args = (3,4,5,6)
    print(x, y, args)


func(1, 2, *[3, 4, 5, 6])  # func(1,2,3,4,5,6)


# 2.4.2、可变长度的关键字参数
# ①:**形参名:用来接受溢出的关键字实参,**会将溢出的关键字实参保存成字典格式,然后赋值给紧跟其后的形参名
#         *后跟的可以是任何名字,规范名为**kwargs
def func(x, y, **kwargs):  # kwargs = {a:111, b:222, c:333}
    print(x, y, kwargs)


func(1, y=2, a=111, b=222, c=333)


# ②:**可以用在实参中(**后跟的是字典),实参中带**,先**后的值打散成关键字实参
def func(x, y, z):
    print(x, y, z)


print(**{'x': 1, 'y': 2, 'z': 3})  # func(x=1,y=2,z=3)


# ③:形参与实参中都带**
def func(x, y, **kwargs):  # kwargs = (3,4,5,6)
    print(x, y, kwargs)


func(**{'y': 222, 'x': 111, 'aaa': 999, 'bbb': 000})  # func(y=222,x=111,aaa=999,bbb=000)


# ==================================================
# 混用*与**:*args必须在**kwargs之前

def func(x, *args, **kwargs):
    print(args)
    print(kwargs)


func(1, 2, 3, 4, 5, 6, x=1, y=2, z=3)

可变长度总结:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值