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)
因此 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)