*在python函数中是什么意思?

2024-06-17 11:38:13 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是一个使用Python3的Jupyter中的简单数学函数

def sum(*formulation):

    ans = 0

    for i in formulation:
        ans += i
    return ans

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

sum(1,2,3,4)

输出将是

10

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

因为如果我不使用*,我会得到一个错误


Tags: 函数in功能forreturndef错误jupyter
3条回答

“*”和“**”符号分别称为“包装”和“拆包”。其主要思想是,如果您解压缩对象,则会将其从列表/目录中删除;如果您打包对象,则会将其放入列表/目录中。例如

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的列表中

这意味着函数接受零个或多个参数,传递的参数将收集在名为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])

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

所以

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

会回来的

[1, 2, 3]

请注意,它在其他上下文中有不同的行为,在这些上下文中,它通常用于“解包”列表或其他ITerable。搜索词将是“星号”、“打包”和“解包”

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

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]

相关问题 更多 >