只要kwarg在位置参数之后,就可以混合和匹配位置参数和关键字参数,以上就是我们在python教程中经常看到的内容,下面我们继续。 函数参数
我们将演示6个函数参数传递的方法,这些方法能够覆盖到所有的问题。 1、如何获得所有未捕获的位置参数
使用*args,让它接收一个不指定数量的形参。
def multiply(a, b, args):
result = a * b
for arg in args:
result = result * arg
return result
最后一次调用将值1赋给参数a,将2赋给参数b,并将arg变量填充为(3,4)。由于这是一个元组,我们可以在函数中循环它并使用这些值进行乘法! 2、如何获得所有未捕获的关键字参数
与*args类似,这次是两个星号**kwargs
def introduce(firstname, lastname, **kwargs):
introduction = f"I am {firstname} {lastname}"
for key, value in kwargs.items():
introduction += f" my {key} is {value} "
return introduction
**kwargs关键字会将所有不匹配的关键字参数存储在一个名为kwargs的字典中。然后可以像上面的函数一样访问这个字典。
print(introduce(firstname='mike', lastname='huls'))
# returns "I am mike huls"
print(introduce(firstname='mike', lastname='huls', age=33, website='mikehuls.com'))
# I am mike huls my age is 33 my website is overfit.cn
3、如果想只接受关键字参数,那怎么设计
可以强制函数只接受关键字参数。
def transfer_money(*, from_account:str, to_account:str, amount:int):
print(f'Transfering ${amount} FORM {from_account} to {to_account}')
transfer_money(from_account='1234', to_account='6578', amount=9999)
# won't work: TypeError: transfer_money() takes 0 positional arguments but 1 positional argument (and 2 keyword-only arguments) were given
transfer_money('1234', to_account='6578', amount=9999)
# won't work: TypeError: transfer_money() takes 0 positional arguments but 3 were given
transfer_money('1234', '6578', 9999)