如何在Python中使用变量和关键字参数

174 阅读3分钟

Python函数可以接受三种类型的参数:标准参数、变量参数 (*args) 和关键字参数 (**kwargs)。标准参数是最简单的,但功能有限。另一方面,*args 和 **kwargs 使你能够使你的函数更加灵活,通过接受可变数量的输入。

你选择的参数传递类型取决于你的函数的性质和你自己喜欢的编程风格。

Python中的基本函数

要理解Python函数中的两个变量参数是如何工作的,首先必须理解它们为什么存在。一个简单的函数像这样声明了一个固定数量的匿名参数。

def addnum(a, b, c):    return a + b + c 

这个函数运行良好,但还有改进的余地。最大的问题是它只处理两个参数,所以它只能把两个数字加起来。如果你想加两个或四个数字呢?这个函数将不允许你这样做。传递多于或少于该函数接受的参数将导致一个TypeError。

当然,你可以创建更多的函数来接受不同数量的参数。但这很不方便,而且根本无法扩展。每次你想处理新数量的输入时,你也需要创建一个新的函数。

这就是变量参数和关键字参数的作用。使用 *args 和 **kwargs,你可以定义灵活的函数,可以接受可变数量的输入。

什么是 Python 中的 *args?

Python 中 *args 的主要思想是允许你向你的函数传递可变数量的输入。这在各种应用中都很方便。例如,想想一个计算器程序,你想让用户将两个或更多的数字相加并返回总和。

注意,args只是一个变量名;重要的是*。你可以为你的变量参数使用任何有效的名称,只要你包括*。

如何使用*args

你可以修改addnum函数以接受可变数量的输入,如下所示。

def addnum(*args):    total = 0     for num in args:        total = total + num     return total

上面的代码片段使用一个for循环来遍历所提供的输入。

然后你可以用可变参数调用addnum函数,它就会工作而不会出现错误。

print(addnum(10, 1, 12, 12, 4, 54, 5)) ## returns 98print(addnum(14, 54, 5)) # returns 73print(addnum(10, 5)) # returns 15

什么是 Python 中的 **kwargs?

虽然 *args 和 **kwargs 都允许我们向函数传递可变数量的输入,但后者是专门针对关键字参数的。如果你不知道的话,关键字参数只是有名字的参数的花哨的名字。

关于**kwargs的另一个独特之处在于,Python将值表示为一个字典。

如何使用 **kwargs

像 *args 一样,双星号是重要的一点;你可以使用任何单词作为参数名。下面是一个如何在 Python 中使用 **kwargs 的例子。

def weekly_attendance(**weekdays):    total_attendees = 0     for attendees in weekdays.values():        total_attendees = total_attendees + attendees     return total_attendees print(weekly_attendance(monday = 265, tuesday = 698, wednesday = 365, thursday = 463, friday = 234)) # returns 2025print(weekly_attendance(monday = 265, friday = 234)) # returns 499print(weekly_attendance(wednesday = 365, thursday = 463, friday = 234)) # returns 1062

上面的代码片段也使用了for循环,但这次使用的是Python的内置values()方法。该方法返回一个字典中所有值的视图对象。values() 方法可以让你毫不费力地在Python 字典中进行循环

使用变量参数来使你的 Python 函数变得灵活

函数参数是很方便的,但是有些函数可以从接受可变数量的参数中受益。命名的关键字参数可以使你的代码更可读,更容易使用。你应该接受 Python 的 *args 和 **kwargs 参数。它们使用起来相当简单,有了它们,你可以使你的函数和程序更加灵活。

通过遵循上面的步骤和代码片段,我们希望你现在可以为你的函数使用可变的关键字和非关键字参数。