参数,*args和*kwargs,*和**的区别

*args和**kwargs

  • *args的使用方法
    *args 用来将参数打包成tuple给函数体调用
def n(*args):
    print(args,type(args))

n() #  () <class 'tuple'>
n('lps')#  ('lps',) <class 'tuple'>
n(12212)#  (12212,) <class 'tuple'>
---------------------------------


def m(x,y,*args):
    print(x,y,args,type(args))
  
m('a','b','fwf')# a b ('fwf',) <class 'tuple'>
m(132,131,231,'tfe')#132 131 (231, 'tfe') <class 'tuple'>
  • **kwargs的使用方法
    **kwargs 打包关键字参数成dict给函数体调用
def w(**kwargs):
    print(kwargs,type(kwargs))

w(b=1,c=2,r='h')#{'b': 1, 'c': 2, 'r': 'h'} <class 'dict'>

**注意点:参数arg、*args、**kwargs三个参数的位置必须是一定的。必须是(arg,*args,kwargs)这个顺序,否则程序会报错。

def w(arg,*args,**kwargs):
    print(arg,args,kwargs)

w(1,'sfsf',a=1)

*和**的区别

(*)会把接收到的参数形成一个元组,而(**)则会把接收到的参数存入一个字典

  • *接收任意长度的参数,并把它们存入一个元组中
def foo(*args):
    print(args)
add=[1,2,3]
foo(add)#([1, 2, 3],)
foo(*add)#(1, 2, 3) 如果我们希望将一个数组形成元组,
         # 需要在传入参数的前面 加上一个*
  • **将接收到的参数存入一个字典
def foo(**kwargs):
    for key,value in kwargs.items():
        print('%s=%s'%(key,value))

foo(a=1,b=2,c=3)
# 輸出
# a=1
# b=2
# c=3
  • (*)和(**)一起使用
def foo(*args,**kwargs):
    print('args',args)
    print('kwargs',kwargs)
add=[1,2,3]
foo(*add,a=1,b=2)
# 输出
# args (1, 2, 3)
# kwargs {'a': 1, 'b': 2}

位置参数

调用函数时根据函数定义的参数位置来传递参数

def num(name,sex):
    sex1={1:'先生',2:'女士'}
    print('hello  %s %s,welcome to python world'%(name,sex1.get(sex)))
num('sfsdf',2)

#两个参数的顺序必须一一对应,且少一个参数都不可以

关键字参数

用于函数调用,通过“键-值”形式加以指定。可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求

print_hello('tanggu',sex=1)
print_hello(1,name='tanggu')
print_hello(name='tanggu',sex=1)
print_hello(sex=1,name='tanggu')


#錯誤示範
print_hello(name='tanggu', 1)
print_hello(sex=1, 'tanggu')

有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序的

默认参数

用于定义函数,为参数提供默认值,调用函数时可传可不传该默认参数的值(注意:所有位置参数必须出现在默认参数前,包括函数定义和调用)

#正确的默认参数定义方式--> 位置参数在前,默认参数在后
def print_hello(name, sex=1):


print_hello('tanggu')
print_hello(2)
print_hello('tanggu',2)

可变参数

定义函数时,有时候我们不确定调用的时候会传递多少个参数(不传参也可以)。此时,可用包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递,会显得非常方便


转载

https://www.cnblogs.com/bingabcd/p/6671368.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值