Python 为了可读性,给另一个名字而不是 `*args` 是个好习惯吗?

Python give another name instead of `*args` for readability is good practice?

因此 python 中有 *args,您可以在其中为函数提供任意数量的参数。假设我创建了以下代码

def example_sum(*args):
    return sum(args)

当我尝试在我的编辑器(VS 代码)中使用它时,它提示函数参数如下

(*args)

现在为了更容易理解我的代码,我想将 *args 命名为其他名称。而且我刚刚发现你确实可以重命名它。

def example_sum(*numbers_to_sum):
    return sum(numbers_to_sum)

但问题是我认为我没有看到其他程序员重命名它。所以想知道这是否是一个好习惯?

如果它有助于人们理解您的代码,我看不出有什么理由不这样做。只是不要过度。

Python 标准库有时会这样做,这里是一个随机示例:heapq.merge - https://github.com/python/cpython/blob/c8aaf71dde4888864c0c351e2f935f87652c3d54/Lib/heapq.py#L314。尽管在绝大多数情况下他们使用 *args。环顾 Django 源代码,他们使用 *something 大约 60 次,其中 35 次是 *args.

简短的回答是,这实际上取决于您的函数的功能。

请注意,因为 *args**kwargs 是标准约定,在某些情况下,最好保留它们,因为它们可能会立即被任何人识别和熟悉阅读您的代码。

您提供的示例是何时可以更改名称的完美示例。请记住,一般的经验法则是它仍然应该很容易传达其目的:

def sum_nums(*numbers):
    ...

*args 更改为 *numbers 在这里完全有效 - 意图仍然非常明显。

一个实际上可能最好更改名称的示例是在装饰器中创建包装函数时:

def my_decorator(func):
    def wrapper(*func_args, **func_kwargs):
        ...
        return func(*func_args, **func_kwargs)
    return wrapper

使用 *func_args*func_kwargs 清楚地表明这里传递的参数来自函数。

甚至 Python 文档偶尔也会将名称更改为更合适的名称。例如,内置函数 zip 不使用 *args:

zip(*iterables)