Python函数基础(二)

一、可变长度的参数(*args与**kwargs的用法)

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

1.可变长度的位置参数

*形参名:用来接收溢出的位置实参,溢出的位置实参会被*保存成元组的形式赋值给紧跟其后的形参
    *后跟的可以是任意名字,但是约定俗成应该是args

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

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


def my_sum(*args):
	res = 0
	for i in args:
		res += i
	return res
	
my_sum(1, 2, 3, 4)

2.*可以用在实参中,实参中带*,将*后的值打散成位置实参

def func(x, y, z):
    print(x, y, z)

# *可以用在实参中,实参中带*,将*后的值打散成位置实参
func(*[1, 2, 3])    # 等价于func(1, 2, 3)
func(*(1, 2, 3))
# func(*[1, 2, 3, 4])
# func(*[1, 2])
# 以上两种方式都不行,多一个少一都不行,一定要和形参数相对应

my_list = [1, 2, 3]
func(*my_list)  # 这里一定要加*号

my_tuple = (1, 2, 3)
func(*my_tuple)

3.形参和实参中都带*

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

# 实参先不带*
# 因为实参没有*,所以是整体传给args,并用元组保存
func(1, 2, [1, 2, 3, 4])    # 结果为:1 2 ([1,2,3,4],)
func(1, 2, (1, 2, 3, 4))    # 结果为:1 2 ((1,2,3,4),)

# 实参带*
# 带*,将*后的值打散,再传给args
func(1, 2, *[1, 2, 3, 4]) #等价于func(1,2,1,2,3,4)    # 结果是:1 2 (1,2,3,4)
func(1, 2, *(1, 2, 3, 4))   # 结果是:1 2 (1,2,3,4)

func(1, *[1, 2, 3, 4])  # 结果是:1,1,(2,3,4)
func(*"hello")  #func('h','e','l','l','o')  结果是:h e ('l','l','o')

4.可变长度的关键字参数

**形参名:用来接收溢出的关键字实参,**会将溢出的关键字实参保存成字典格式,然后赋值给紧跟其后的形参
    **后跟的可以是任意名字,但是约定俗成应该是kwargs

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


# 传入方式有两种:
# 第一种:
func(1, y=2, a=3, b="it", c=[1, 2, 3])

# 第二种:
dict1 = {"age": 18, "name": "小美"}
func(1, 2, **dict1)

5.**可以用在实参中(**后跟的只能是字典),实参中带**,将**后的值打散成关键字实参

def func(x, y, z):
    print(x, y, z)


# 字典里的key值要与形参名一致
func(**{"x":1, "y":2, "z":3})

6.形参与实参中都带**

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


# 记住,要将**后的值打散
func(**{"x":1, "y":2, "z":3, "p":4})
# 1 2 {'z':3,'p':4}

7.*args与**kwargs混合使用

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


func(1, 2, 3, 4, a=1, b=2, c=3)
def index(x, y, z):
    print(x, y, z)


def wrapper(*args, **kwargs):# args=(1,) kwargs={'z':2,'y':3}   形参汇总
    index(*args, **kwargs)  # x=1 y=3 z=2   实参打散


wrapper(1, z=2, y=3)

二、命名关键字参数(了解)

在定义函数时,*后定义的参数,如下所示,称之为命名关键字参数
特点:
    1.命名关键字形参必须按照key=value的形式为其传值

def func(x, y, *, a, b):# 其中a,b称之为命名关键字参数
    print(x, y)
    print(a, b)


func(1, 2, b=3, a=4)


def func(x, y, *, a=10, b):# a=10 叫做给命名关键字参数赋默认值,不是默认参数
    print(x, y)
    print(a, b)


func(1, 2, b=30)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值