不定长参数
在 Python 中,不定长参数(Arbitrary Argument Lists)允许函数接收任意数量的参数。这包括两种类型:
- 位置参数(Positional arguments):使用
args来接收。 - 关键字参数(Keyword arguments):使用
kwargs来接收。
1. 位置参数(*args)
当你在函数定义中看到 *args,这意味着函数可以接收任意数量的位置参数。这些参数在函数内部以元组(tuple)的形式存在。
def func(*args):
for arg in args:
print(arg)
# 调用函数
func(1, 2, 3) # 输出: 1 2 3
在上面的例子中,func 可以接收任意数量的位置参数。这些参数在函数内部通过 args 变量访问,args 是一个元组,包含了所有传递给函数的位置参数。
- 错误示范
def JayChou(a, *b, c):
print(a)
print(b)
print(c)
JayChou(1, 555, 5768, 55451,)

这样可以使用的:
JayChou(1, 555, 5768, 55451,c=5)
2. 关键字参数(**kwargs)
关键字参数允许你传递任意数量的命名参数。在函数定义中,**kwargs 用于接收这些参数,它们在函数内部以字典(dict)的形式存在。
def func(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
# 调用函数
func(a=1, b=2, c=3) # 输出: a: 1 b: 2 c: 3
在这个例子中,func 可以接收任意数量的命名参数。这些参数在函数内部通过 kwargs 变量访问,kwargs 是一个字典,包含了所有传递给函数的命名参数。
综合使用
你可以在同一个函数中同时使用 *args 和 **kwargs 来接收任意数量的位置参数和命名参数。
def func(*args, **kwargs):
print("位置参数:", args)
print("关键字参数:", kwargs)
# 调用函数
func(1, 2, 3, a=4, b=5) # 输出: 位置参数: (1, 2, 3) 关键字参数: {'a': 4, 'b': 5}
def sun(aa,*a, **b):
print(aa)
print(a)
print(b)
sun(1, 55258, x=25412, y=5123512)
# 输出:
1
(55258,)
{'x': 25412, 'y': 5123512}
注意事项
-
在函数定义中,
*args必须位于**kwargs之前,因为*args收集所有未命名的参数,而**kwargs收集所有命名的参数。

-
使用不定长参数可以增加函数的灵活性,但也可能使函数的调用和维护变得更加复杂。因此,应当谨慎使用。
不定长参数是 Python 函数定义中非常强大的特性,它们使得函数能够灵活地处理各种输入情况。
解包的使用
在 Python 中,* 操作符用于解包(unpacking)一个序列(如列表或元组)中的元素,使得这些元素可以作为独立的参数传递给函数。在你提供的 plot_learning_curve 函数中,*ylim 的使用正是基于这个原理。
让我们来看一下 plt.ylim(*ylim) 这行代码:
plt.ylim()是 matplotlib 库中用来设置 y 轴显示范围的函数,它接受两个参数:y轴的最小值和最大值。*ylim表示将ylim变量解包,将其元素作为独立的参数传递给plt.ylim()函数。
如果 ylim 被定义为一个包含两个元素的列表或元组,例如 [ymin, ymax],那么 *ylim 将会把这两个值解包并分别传递给 plt.ylim() 函数,从而设置 y 轴的显示范围。
这里是一个简单的例子来说明 * 的用法:
# 定义 y 轴的最小值和最大值
ylim_values = [0.8, 1.0]
# 使用解包操作符 * 将 ylim_values 中的元素作为独立参数传递给 plt.ylim()
plt.ylim(*ylim_values)
def not_with_param(dot):
print(*dot)
not_with_param([4,15,7,9,'y']) # 输出 4 15 7 9 y
在这个例子中,plt.ylim(0.8, 1.0) 和 plt.ylim(*ylim_values) 是等价的,都会将 y 轴的范围设置为从 0.8 到 1.0。
在 plot_learning_curve 函数中,如果调用者没有提供 ylim 参数,那么 plt.ylim() 将不会被调用,y 轴的范围将由 matplotlib 自动决定。如果提供了 ylim 参数,那么函数将使用提供的值来设置 y 轴的范围。

3235

被折叠的 条评论
为什么被折叠?



