python - 为什么拆包比传入列表更受欢迎

标签 python parameters arguments parameter-passing iterable-unpacking

解包参数列表:

def send(*data):
    for datum in data:
        ser.write(datum)

与首先发送列表:

def send(data):
    for datum in data:
        ser.write(datum)

最佳答案

如果它简化了 API,否则您将总是必须传入一个列表:

send(something, otherthing)

对比:

send([something, otherthing])

您的常用参数取自不同的位置;例如somethingotherthing 更有可能是单独的变量,而不是已经收集在一个列表中的变量。

Python 3.x print() 函数以及 os.path.join() 函数就是这样做的。在调用 API 之前,您很少会将所有打印参数或要加入的路径元素组合在一个列表中。

比较:

os.path.join(rootdirectory, relativepath, filename)
print('Debug information:', localvariable)

对比

os.path.join([rootdirectory, relativepath, filename])
print(['Debug information:', localvariable])

如果 .join()print() 只接受一个位置参数(一个列表),API 的用户会发现自己键入 [] 括号一遍又一遍。

通过接受可变数量的位置参数,您可以为 API 的用户省去为函数调用创建列表的麻烦。在参数已经收集到列表中的极少数情况下,它们可以使用 *params 调用约定:

send(*params)

回应你的函数签名。

关于python - 为什么拆包比传入列表更受欢迎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13939156/

相关文章:

python - 获取某些列中每个值出现的百分比

python - heapq.merge 是否可以与 Iterator 类一起使用?

c - 需要了解一个用输出覆盖输入的简单示例

java - 如何检查一个字符是大写还是小写?

c++ - 字符串不通过构造函数参数

python - 在 Python 中使用模查找素数

python - 在Azure函数中导入python cv2时出错

java - 带有 JDBC 准备语句的字符串中的圆括号

c - C 结构中函数的参数

c++ - 如何将多个参数传递给 qt5 中的 SLOT 函数?