2024-06-17 11:38:13 发布
网友
下面是一个使用Python3的Jupyter中的简单数学函数
def sum(*formulation): ans = 0 for i in formulation: ans += i return ans
如果我想尝试这个功能,我会这样写:
sum(1,2,3,4)
输出将是
10
我的问题是*在sum(*formulation)中是什么意思
*
sum(*formulation)
因为如果我不使用*,我会得到一个错误
“*”和“**”符号分别称为“包装”和“拆包”。其主要思想是,如果您解压缩对象,则会将其从列表/目录中删除;如果您打包对象,则会将其放入列表/目录中。例如
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的列表中
formulation
例如,当您调用sum(1, 2, 3, 4)时,formation将以[1, 2, 3, 4]结束
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 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]
“*”和“**”符号分别称为“包装”和“拆包”。其主要思想是,如果您解压缩对象,则会将其从列表/目录中删除;如果您打包对象,则会将其放入列表/目录中。例如
在这里,我将[1,2,3]解包到“x”的列表中。因此,x现在是[1,2,3,4]。再举一个例子,
在这里,我把前两本词典“解包”成了第三本词典。下面是另一个例子:
这里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])
这被称为星号表达式。在函数的参数列表中,这意味着所有其他提供的位置参数(未被前面的位置参数捕获)将作为列表“打包”到带星号的变量中
所以
会回来的
请注意,它在其他上下文中有不同的行为,在这些上下文中,它通常用于“解包”列表或其他ITerable。搜索词将是“星号”、“打包”和“解包”
解包的一个很好的助记符是删除列表括号
以及像正则表达式通配符一样打包
相关问题 更多 >
编程相关推荐