【问题标题】:What data structures can be passed to Python functions as packed arguments?哪些数据结构可以作为打包参数传递给 Python 函数?
【发布时间】:2020-12-26 01:54:57
【问题描述】:

在 Python 中,可以使用星号表达式来解包变量:

def unpack(*args):
    return args

我知道这里的*args 可以是一个元组,例如args = (arg1, arg2, arg3)。除了**kwargs 的字典,*arg 还支持哪些其他数据结构? “幕后”会发生什么,例如如果我这样做:

args = numpy.asarray([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
unpack(args)

【问题讨论】:

  • asarray() 是一个函数,您正在尝试对其进行索引。 unpack 是什么?你甚至没有检查你的代码是否运行!
  • 回答你的问题:args 是一个元组,包含作为位置参数传递给函数的任何内容。
  • * 的参数必须是 Iterable** 的参数必须是 Mapping。有关此抽象基类的一些详细信息,请参阅docs.python.org/3/library/collections.abc.html

标签: python arrays parameters arguments parameter-passing


【解决方案1】:

您提到的python内置数据结构的用例是有效的:*args(甚至range)的列表、集合(以及Iteratable types的所有内容)和**kwargs的字典(以及所有 Mapping Types 的内容)。

NumPy 数组也是可迭代的:

import numpy as np

def unpack(*args):
    x, y, z = args
    # [1 2 3]
    print(x)


xargs = np.asarray([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
unpack(*xargs)

阅读更多:

【讨论】:

    猜你喜欢
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-04
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多