【学习笔记】||*args 和 **kwargs

博客介绍了Python里*args和**kwargs的使用。指出*是必需的,写成*args和**kwargs是约定。它们主要用于函数定义,允许传递未指定数量的参数,*args用于非关键字可变长度参数列表,**kwargs用于处理命名参数,并给出了示例。

来源:args_and_kwargs


  • 首先, ∗ ^{*} args 或 ∗ ∗ ^{**} ∗∗kwargs中,只有 ∗ ^{*} (星号)是必需的。也可以写成 ∗ ^{*} var 和 ∗ ^{*} vars。编写 ∗ ^{*} args 和 ∗ ∗ ^{**} ∗∗kwargs 只是一种约定。
  • ∗ ^{*} args 和 ∗ ∗ ^{**} ∗∗kwargs 主要用于函数定义。 ∗ ^{*} args 和 ∗ ∗ ^{**} ∗∗kwargs 允许将未指定数量的参数传递给函数。
  • ∗ ^{*} args 用于向函数发送非关键字可变长度参数列表
    • 例:
def test_var_args(f_arg, *argv):
    print("first normal arg:", f_arg)
    for arg in argv:
        print("another arg through *argv:", arg)

test_var_args('yasoob', 'python', 'eggs', 'test')

输出结果:
first normal arg: yasoob
another arg through *argv: python
another arg through *argv: eggs
another arg through *argv: test
  • 如果想在函数中处理命名参数,应该使用 ∗ ∗ ^{**} ∗∗kwargs 。
    • 例:
def greet_me(**kwargs):
    for key, value in kwargs.items():
        print("{0} = {1}".format(key, value))

greet_me(name="yasoob")

输出结果:
name = yasoob
Traceback (most recent call last): File "E:\中国四维\四维世景科技(北京)有限公司\AI学习\YOLOv12\YOLOv12-train.py", line 37, in <module> model.train( File "D:\X\Anaconda\Lib\site-packages\ultralytics\engine\model.py", line 800, in train self.trainer.train() File "D:\X\Anaconda\Lib\site-packages\ultralytics\engine\trainer.py", line 235, in train self._do_train() File "D:\X\Anaconda\Lib\site-packages\ultralytics\engine\trainer.py", line 423, in _do_train loss, self.loss_items = self.model(batch) ^^^^^^^^^^^^^^^^^ File "D:\X\Anaconda\Lib\site-packages\torch\nn\modules\module.py", line 1751, in _wrapped_call_impl return self._call_impl(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\X\Anaconda\Lib\site-packages\torch\nn\modules\module.py", line 1762, in _call_impl return forward_call(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\X\Anaconda\Lib\site-packages\ultralytics\nn\tasks.py", line 138, in forward return self.loss(x, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\X\Anaconda\Lib\site-packages\ultralytics\nn\tasks.py", line 338, in loss preds = self.forward(batch["img"]) ^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\X\Anaconda\Lib\site-packages\ultralytics\nn\tasks.py", line 139, in forward return self.predict(x, *args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\X\Anaconda\Lib\site-packages\ultralytics\nn\tasks.py", line 157, in predict return self._predict_once(x, profile, visualize, embed) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\X\Anaconda\Lib\site-packages\ultralytics\nn\tasks.py", line 180, in _predict_once x = m(x) # run ^^^^ File "D:\X\Anaconda\Lib\site-packages\torch\nn\modules\module.py", line 1751, in _wrapped_call_impl return self._call_impl(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\X\Anaconda\Lib\site-packages\torch\nn\modules\module.py", line 1762, in _call_impl return forward_call(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\X\Anaconda\Lib\site-packages\ultralytics\nn\modules\block.py", line 318, in forward y.extend(m(y[-1]) for m in self.m) File "D:\X\Anaconda\Lib\site-packages\ultralytics\nn\modules\block.py", line 318, in <genexpr> y.extend(m(y[-1]) for m in self.m) ^^^^^^^^ File "D:\X\Anaconda\Lib\site-packages\torch\nn\modules\module.py", line 1751, in _wrapped_call_impl return self._call_impl(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\X\Anaconda\Lib\site-packages\torch\nn\modules\module.py", line 1762, in _call_impl return forward_call(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\X\Anaconda\Lib\site-packages\ultralytics\nn\modules\block.py", line 353, in forward return self.cv3(torch.cat((self.m(self.cv1(x)), self.cv2(x)), 1)) ^^^^^^^^^^^^^^^^^^^ File "D:\X\Anaconda\Lib\site-packages\torch\nn\modules\module.py", line 1751, in _wrapped_call_impl : 0% ──────────── 0/1 0.2s return self._call_impl(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\X\Anaconda\Lib\site-packages\torch\nn\modules\module.py", line 1762, in _call_impl return forward_call(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\X\Anaconda\Lib\site-packages\torch\nn\modules\container.py", line 240, in forward input = module(input) ^^^^^^^^^^^^^ File "D:\X\Anaconda\Lib\site-packages\torch\nn\modules\module.py", line 1751, in _wrapped_call_impl return self._call_impl(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\X\Anaconda\Lib\site-packages\torch\nn\modules\module.py", line 1762, in _call_impl return forward_call(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\X\Anaconda\Lib\site-packages\ultralytics\nn\modules\block.py", line 495, in forward return x + self.cv2(self.cv1(x)) if self.add else self.cv2(self.cv1(x)) ^^^^^^^^^^^^^^^^^^^^^ File "D:\X\Anaconda\Lib\site-packages\torch\nn\modules\module.py", line 1751, in _wrapped_call_impl return self._call_impl(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\X\Anaconda\Lib\site-packages\torch\nn\modules\module.py", line 1762, in _call_impl return forward_call(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\X\Anaconda\Lib\site-packages\ultralytics\nn\modules\conv.py", line 81, in forward return self.act(self.bn(self.conv(x))) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\X\Anaconda\Lib\site-packages\torch\nn\modules\module.py", line 1751, in _wrapped_call_impl return self._call_impl(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\X\Anaconda\Lib\site-packages\torch\nn\modules\module.py", line 1762, in _call_impl return forward_call(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\X\Anaconda\Lib\site-packages\torch\nn\modules\activation.py", line 432, in forward return F.silu(input, inplace=self.inplace) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "D:\X\Anaconda\Lib\site-packages\torch\nn\functional.py", line 2379, in silu return torch._C._nn.silu_(input) ^^^^^^^^^^^^^^^^^^^^^^^^^ torch.OutOfMemoryError: CUDA out of memory. Tried to allocate 30.00 MiB. GPU 0 has a total capacity of 4.00 GiB of which 14.64 MiB is free. Of the allocated memory 2.22 GiB is allocated by PyTorch, and 37.32 MiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True to avoid fragmentation. See documentation for Memory Management (https://pytorch.org/docs/stable/notes/cuda.html#environment-variable如何解决
09-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值