Python函数的可变参数和关键字参数的使用。
Python是一种非常灵活的编程语言,因其强大的标准库和各种框架,具有很好的拓展能力。在Python中,函数是一个非常重要的概念,函数可以帮助我们让代码更加模块化、易于维护和测试。
Python函数的可变参数和关键字参数是Python语言中的两个非常重要的特性,在实际的开发中,它们经常被用来处理一些可变的参数和关键字参数,这可以让函数更加灵活和易于使用。本文介绍了Python函数的可变参数和关键字参数的使用。
一、可变参数
Python中的可变参数是指在声明函数时并不知道需要传入多少个参数,可以用一个特殊语法 "*" 定义可变参数。这个语法可以让函数接受任意数量的参数,这些参数会被收集到一个元组中,并可以对这个元组进行操作。
1、定义可变参数
在Python中,定义可变参数只需要在函数的参数列表中使用 "*" 来表示,如下所示:
def demo(*args):
print(args)
这个函数定义了一个可变参数args,这个args参数可以接受任意数量的参数。下面我们来看一下这个函数的使用:
demo(1, 2, 3) # (1, 2, 3)
demo('a', 'b', 'c') # ('a', 'b', 'c')
demo() # ()
在这个例子中,我们可以看到demo函数可以接受任意数量的参数,并且这些参数会被收集到一个元组中。
2、使用可变参数
当我们在使用Python中的可变参数时,需要注意以下几点:
(1) 如果函数中还有其他参数,那么可变参数要放在参数列表的最后。
def demo(msg, *args):
print(msg, args)
(2) 可变参数可以和其他类型的参数一起使用。
def demo(name, age, *args):
print(name, age, args)
(3) 可变参数一般和解包操作一起使用。解包操作是指使用 * 将序列中的元素解包成单独的元素。
def demo(*args):
print(args)
def demo2(*args):
demo(*args)
(4) 可变参数也可以在函数的返回值中使用。
def demo(*args):
return sum(args)
print(demo(1, 2, 3)) # 6
3、实例
下面是一个使用可变参数的实例,我们通过可变参数来统计一个数列中的所有偶数和所有奇数的和:
def calc(*nums):
even = 0
odd = 0
for i in nums:
if i % 2 == 0:
even += i
else:
odd += i
return even, odd
print(calc(1, 2, 3, 4, 5, 6)) # (12, 9)
这个calc函数定义了一个可变参数nums,这个nums参数会接受任意数量的参数,然后使用循环来遍历这些参数,并判断它们是偶数还是奇数,最后返回两个值,分别是偶数和奇数的和。
二、关键字参数
Python中的关键字参数是指在调用函数时,可以给参数指定一个名称,这样我们可以让函数更加灵活地接收参数,并避免了参数的顺序问题。关键字参数的语法是用带两个星号 ** 的参数表示,它们会被收集成一个字典,其键为参数名,值为对应的数值。
1、定义关键字参数
在Python中,定义关键字参数采用两个星号 ** 来表示,如下所示:
def demo(**kwargs):
print(kwargs)
这个函数定义了一个关键字参数kwargs,这个kwargs参数可以接受任意数量的关键字参数。下面我们来看一下这个函数的使用:
demo(name='Tom', age=20) # {'name': 'Tom', 'age': 20}
demo(sex='male', score=80) # {'sex': 'male', 'score': 80}
demo() # {}
在这个例子中,我们可以看到demo函数可以接受任意数量的关键字参数,并且这些参数会被收集到一个字典中。
2、使用关键字参数
当我们在使用Python中的关键字参数时,需要注意以下几点:
(1) 关键字参数可以和位置参数一起使用。
def demo(name, age=18, **kwargs):
print(name, age, kwargs)
demo('Tom', sex='male', score=80) # Tom 18 {'sex': 'male', 'score': 80}
(2) 如果函数中还有其他参数,那么关键字参数要放在参数列表的最后。
def demo(name, age=18, **kwargs):
print(name, age, kwargs)
def demo2(msg, *args, **kwargs):
demo(*args, **kwargs)
(3) 关键字参数可以和可变参数一起使用。
def demo(*args, **kwargs):
print(args, kwargs)
demo(1, 2, 3, name='Tom', age=18) # (1, 2, 3) {'name': 'Tom', 'age': 18}
(4) 关键字参数也可以在函数的返回值中使用。
def demo(**kwargs):
return sum(kwargs.values())
print(demo(a=1, b=2, c=3)) # 6
3、实例
下面是一个使用关键字参数的实例,我们使用一个Python字典来记录一个人的信息,包括姓名、性别、年龄等等。我们可以使用关键字参数来传递这个字典,然后在函数中对这个字典进行操作。
def print_info(**info):
print("Name: ", info.get('name'))
print("Sex: ", info.get('sex'))
print("Age: ", info.get('age'))
print("Score: ", info.get('score'))
info = {'name': 'Tom', 'sex': 'male', 'age': 20, 'score': 80}
print_info(**info)
这个print_info函数定义了一个关键字参数info,这个info参数可以接受一个任意数量的关键字参数,也就是我们所定义的字典。最后我们将这个字典传递给函数,并对这个字典进行操作,输出其中的姓名、性别、年龄和分数。这个例子中,我们使用了双星号操作符 ** 来将这个字典传递给函数。
