Python学习笔记(四):函数中的位置参数、关键字参数、默认参数、收集参数的区别

位置参数
最常用的参数方法,通过位置进行匹配把参数值传递给函数头部的参数名称,匹配顺序为从左到右

def func(name, age):
    print("my name is %s, i am %s years old"%(name, age))

#参数的顺序从左到右一一对应,不能缺少或增加额外的参数
func('liyitong', 23)  
my name is liyitong, i am 23 years old

关键字参数
通过参数名进行匹配,可以忽略位置,使用name=value这种语法

def func(name, age):
    print("my name is %s, i am %s years old"%(name, age))
    
func(name='liyitong',age=23)
my name is liyitong, i am 23 years old
my name is linsiyi, i am 24 years old

注意,关键参数和位置参数混合使用时,位置参数(value)必须先放在匹配的位置,且在关键字参数(name=value)之前,但如果只有关键字参数,则不存在先后顺序
以下是正确的调用方式

func('faka', age=23)
func(name='faka', age=23)
func(age=23, name='faka')

以下是错误的调用方式

func(age=23, 'faka')  #SyntaxError: positional argument follows keyword argument
func(23,name='faka') #func() got multiple values for argument 'name'

默认参数
为没有传入值的参数定义参数值,函数调用时可传可不传,注意函数定义或者调用时,位置参数必须出现在默认参数之前

def func(name, age=23):  #注意函数定义或者调用时,位置参数必须出现在默认参数之前
    print("my name is %s, i am %s years old"%(name, age))

func('faka')  #不传age的值,使用默认值23
>>> my name is faka, i am 23 years old

func('faka', 25)   #传入age的值为25
>>> my name is faka, i am 25 years old

收集参数 :允许用户提供任意数量的参数,
收集位置参数,使用*args

def func(*args):
    print(args)

func('hello')  #打印出来是一个元组,也就是说前面有星号的参数会被放在元组中
>>> ('hello',)
func(1, 2, 3)
>>> (1, 2, 3)

与位置参数一起使用时,带星号的参数意味着收集余下的位置参数

def func(title, *args):
    print(title)
    print(args)
    
func('hello','world','!')
>>> hello
    ('world', '!')

如果还有后续参数则需要使用名称指定,因为星号不会收集关键字参数

def func(title, *args, title2):
    print(title, args, title2)
    
func('hello','world',title2='!')  
>>> hello ('world',) !

如果需要收集关键字参数,可使用两个星号 **kargs

def func(**args):
    print(args)
    
func(x=1, y=2, z=3) #这样打印出的是一个字典而不是元组
>>> {'x': 1, 'y': 2, 'z': 3}

将不同参数结合使用,基本原则是:先位置参数,默认参数,收集位置参数(*args),收集关键字参数(**kargs)(定义和调用都应遵循)

def func(x, y, z=3, *args, **kargs):
    print(x, y, z, args, kargs)
    
func(1,2,3,4,5,title1='hello',title2='world')
>>> 1 2 3 (4, 5) {'title1': 'hello', 'title2': 'world'}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值