为何返回的结果不一样?
def func_star(a, *args):print(a)
print(*args)
>>> func_star(1)
1
def func_star(a, *args):
print(a)
dict2 = args
print(dict2)
>>> func_star(1)
1
()
在第一个函数中, *args 是用来接收任意数量的位置参数,它会将这些参数打包成一个元组。当我们调用 func_star(1) 时,只有一个位置参数 1 被传递给了函数,因此 *args 接收到的是一个空元组,即 () , 因此第一个函数的输出结果为 1 和一个空行。
而在第二个函数中, args 是一个元组,我们将它赋值给了 dict2 。当我们调用 func_star(1) 时,只有一个位置参数 1 被传递给了函数,因此 args 接收到的是一个空元组,即 () , 然后将这个空元组赋值给了 dict2 ,因此第二个函数的输出结果为 1 和一个空元组 () 。 这是因为在第一个示例中,虽然函数定义了可变长度参数 *args,但实际上没有传入任何参数来填充它。因此,在函数体内部,*args 是一个空元组 ()。
而在第二个示例中,虽然只传递了一个参数 1 给函数,但它实际上被赋值给了参数 a。然后 args 参数接收了一个空元组 (),但它被赋值给了一个新的字典变量 dict2,因此在函数中打印出来的 args 实际上是一个空字典 {}。 第一个函数 func_star 只有一个参数 a,因此当你调用 func_star(1) 时,只有一个参数被传递给了该函数,对应于变量 a 的值为 1。由于没有其他参数,因此 *args 为空元组 (),因此在第一个函数中 print(*args) 输出为空。
第二个函数 func_star 中也只有一个必选参数 a,但它还定义了一个可变参数 *args,它会捕获所有其他未匹配的位置参数并将它们打包成一个元组。在你调用 func_star(1) 时,只有一个参数被传递给了该函数,对应于变量 a 的值为 1。由于没有其他位置参数,因此 *args 为空元组 ()。但是在函数中,你在第二行使用了元组 args 获取可变参数,而不是使用 *args 将其展开。因此 args 中实际上只有一个值,就是空字典 {}。因此在第二个函数中,print(dict2) 输出的是空字典 {}。 这是因为在第一个示例中,函数func_star()仅有一个参数a,没有传入额外的可变参数,因此*args会被视为空元组,所以在第一个示例中,打印出来的*args为空。
而在第二个示例中,定义的可变参数*args并未被使用,而是定义了一个名为dict2的局部变量,并将args赋值给了它,因此,在第二个示例中,打印出来的args的结果是一个空元组。(注意:应该使用args而不是dict2) 本帖最后由 lzb1001 于 2023-5-20 19:42 编辑
歌者文明清理员 发表于 2023-5-20 16:56
这是因为在第一个示例中,函数func_star()仅有一个参数a,没有传入额外的可变参数,因此*args会被视为空元 ...
(注意:应该使用args而不是dict2)
上面这句话是什么意思?
必须:
def func_star(a, *args):
print(a)
print(args)
不能这样:
def func_star(a, *args):
print(a)
dict2 = args
print(dict2)
吗?为什么?
页:
[1]