python | 不定长参数的使用以及解包符*的使用

不定长参数

在 Python 中,不定长参数(Arbitrary Argument Lists)允许函数接收任意数量的参数。这包括两种类型:

  1. 位置参数(Positional arguments):使用 args 来接收。
  2. 关键字参数(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 轴的范围。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胜天半月子

打不打商的无所谓,能帮到你就好

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值