python中变量的类型是动态的随时可以变化_Python | 动态参数的使用

1. ' * ' 的作用

用在动态参数前,打包多个参数并将其转化为元组

def func(*args):

print(args)

func(1, 2, 3) # (1, 2, 3)

输入参数为1, 2, 3,最后返回的结果是一个元组 (1, 2, 3)。

用在可迭代对象前,进行自动解包转化为多个单变量参数

def func(a, b, c):

print(a, b, c)

args = [1, 2, 3]

func(*args) # 1 2 3

输入参数为一个列表[1, 2, 3],解释器自动进行解包然后分别传递给3个变量。

2. ' ** ' 的作用

用在动态参数前,打包多个赋值形式的参数并将其转化为字典

def func(**kwargs):

print(kwargs)

func(a=1, b=2, c=3) # {'a': 1, 'b': 2, 'c': 3}

函数接收类似于关键参数一样赋值形式的多个实参,并返回一个字典。

用在字典前,解包字典中的数据项作为键值参数传给函数

def func(a, b, c):

print(a, b, c)

kwargs = {'a': 1, 'b': 2, 'c': 3}

func(**kwargs) # 1 2 3

3. 参数类型

位置参数

所有参数的顺序必须一一对应,且数量一致。

def func(a, b, c):

print(a, b, c)

func(1, 2, 3) # 1 2 3

关键字参数

函数调用通过键值对形式加以指定。关键字参数之间不存在先后顺序;有位置参数时,位置参数必须在关键字参数的前面。

def func(a, b, c):

print(a, b, c)

func(a=1, b=2, c=3) # 1 2 3

func(b=2, c=3, a=1) # 1 2 3

func(4, b=5, c=6) # 4 5 6

# 错误的调用方式

func(a=4, b=5, 6) # SyntaxError: positional argument follows keyword argument

默认参数

为参数提供默认值,调用函数时可传可不传。所有位置参数必须放在默认参数前面。

# 正确的定义方式

def func(a, b=2):

print(a, b)

func(1) # 1 2

func(1, 3) # 1 3

# 错误的定义方式

def func(a=1, b):

print(a, b) # SyntaxError: non-default argument follows default argument

4. ' *args ' 与 ' **kwargs '

定义函数时,如果不确定调用的时候会传递多少个参数,可以打包位置参数或者关键字参数来进行参数传递。

位置传递

def func(*args):

print(args)

func(1) # (1,)

func(1, 2) # (1, 2)

func(1, 2, 3) # (1, 2, 3)

关键字传递

def func(**kwargs):

print(kwargs)

func(a=1) # {'a': 1}

func(a=1, b=2) # {'a': 1, 'b': 2}

func(a=1, b=2, c=3) # {'a': 1, 'b': 2, 'c': 3}

注意:*和**只有在传参时才有用。

# 错误的使用方法

args = (1,2,3)

a, b, c = *args # SyntaxError: can't use starred expression here

5. 参数混合使用

函数定义和调用时的参数类型必须一致;位置参数放在*args参数前,*args参数放在**kwargs参数前,**kwargs参数放在最后。

# 位置参数 默认参数 *args **kwargs

def func(a, b, c=0, *args, **kwargs):

print(a, b, c, args, kwargs)

func(1, 2, m=7, n=8) # 1 2 0 () {'n': 8, 'm': 7}

func(1, 2, 3, 4, 5, 6, m=7, n=8) # 1 2 3 (4, 5, 6) {'m': 7, 'n': 8}

# 位置参数 *args 默认参数 **kwargs

def func(a, b, *args, c=0, **kwargs):

print(a, b, c, args, kwargs)

func(1, 2, 3, 4, 5, 6, m=7, n=8) # 1 2 0 (3, 4, 5, 6) {'m': 7, 'n': 8}

func(1, 2, 3, 4, 5, 6, c=9, m=7, n=8) # 1 2 9 (3, 4, 5, 6) {'m': 7, 'n': 8}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值