【问题标题】:What does * mean in python function? [duplicate]python函数中的*是什么意思? [复制]
【发布时间】:2020-05-19 23:55:45
【问题描述】:

这是 Jupyter 中使用 Python 3 的一个简单数学函数

def sum(*formulation):

    ans = 0

    for i in formulation:
        ans += i
    return ans

如果我想试试这个功能,我会这样写:

sum(1,2,3,4)

输出将是

10

我的问题是* 中的sum(*formulation) 是什么意思?

因为如果我不使用*,就会出错。

【问题讨论】:

标签: python jupyter


【解决方案1】:

“*”和“**”符号称为“打包”和“拆包”。主要思想是,如果您解包对象,它们将从列表/字典中删除,如果您打包对象,则将它们放入列表/字典中。例如,

x = [*[1,2,3],4]
print(x)

在这里,我已将 [1,2,3] “解包”到“x”列表中。因此,x 现在是 [1,2,3,4]。这是另一个例子,

d1 = {'x':7}
d2 = {'y':10}
d3 = {**d1,**d2}

在这里,我将前两个字典“解包”到第三个字典中。这是另一个例子:

def func(*args):
    print(args)

func(1,2,3,4,5)

这里 1,2,3,4,5 不在列表中,因此它们将被“打包”到 func 中称为 args 的列表中。

【讨论】:

    【解决方案2】:

    这被称为星号表达式。在函数的参数列表中,这意味着所有其他提供的位置参数(未被前面的位置参数捕获)将作为列表“打包”到星号变量中。

    所以

    def function(*arguments):
        print(arguments)
    function(1, 2, 3)
    

    会回来

    [1, 2, 3]
    

    请注意,它在通常用于“解包”列表或其他可迭代对象的其他上下文中具有不同的行为。搜索词将是“已加星标”、“打包”和“拆包”。

    解包的一个很好的助记符是它们删除列表括号

    a, b, c = *[1, 2, 3]  #equivalent to
    a, b, c =   1, 2, 3  
    

    并且像正则表达式通配符一样打包

    def function(*arguments):
        pass
    def function(zero, or_, more, arguments):
        pass
    head, *everything_in_between, tail = [1, 2, 3, 4, 5, 6]
    

    【讨论】:

      【解决方案3】:

      这意味着该函数接受零个或多个参数,并且传递的参数将被收集在一个名为 formulation 的列表中。

      例如,当您调用sum(1, 2, 3, 4) 时,formation 最终会变成[1, 2, 3, 4]

      * 的另一个类似但不同的用法是在调用函数时。假设你有一个定义为def add(a, b)的函数,并且你有一个列表l = [1, 2],当你调用add(*l)时,它意味着解包l,相当于add(l[0], l[1])

      【讨论】:

        猜你喜欢
        • 2011-07-08
        • 2015-02-13
        • 2019-03-30
        • 2013-10-31
        • 2019-04-15
        • 2020-03-26
        • 2019-12-17
        • 2011-12-23
        • 2013-01-30
        相关资源
        最近更新 更多