鱼C论坛

 找回密码
 立即注册
查看: 1567|回复: 5

为何返回的结果不一样?

[复制链接]
发表于 2023-5-20 16:40:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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
()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-20 16:41:00 | 显示全部楼层
在第一个函数中, *args 是用来接收任意数量的位置参数,它会将这些参数打包成一个元组。当我们调用 func_star(1) 时,只有一个位置参数 1 被传递给了函数,因此 *args 接收到的是一个空元组,即 () , 因此第一个函数的输出结果为 1 和一个空行。

而在第二个函数中, args 是一个元组,我们将它赋值给了 dict2 。当我们调用 func_star(1) 时,只有一个位置参数 1 被传递给了函数,因此 args 接收到的是一个空元组,即 () , 然后将这个空元组赋值给了 dict2 ,因此第二个函数的输出结果为 1 和一个空元组 () 。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-20 16:41:28 | 显示全部楼层
这是因为在第一个示例中,虽然函数定义了可变长度参数 *args,但实际上没有传入任何参数来填充它。因此,在函数体内部,*args 是一个空元组 ()。
而在第二个示例中,虽然只传递了一个参数 1 给函数,但它实际上被赋值给了参数 a。然后 args 参数接收了一个空元组 (),但它被赋值给了一个新的字典变量 dict2,因此在函数中打印出来的 args 实际上是一个空字典 {}。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-20 16:46:35 | 显示全部楼层
第一个函数 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) 输出的是空字典 {}。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-20 16:56:21 | 显示全部楼层
这是因为在第一个示例中,函数func_star()仅有一个参数a,没有传入额外的可变参数,因此*args会被视为空元组,所以在第一个示例中,打印出来的*args为空。
而在第二个示例中,定义的可变参数*args并未被使用,而是定义了一个名为dict2的局部变量,并将args赋值给了它,因此,在第二个示例中,打印出来的args的结果是一个空元组。(注意:应该使用args而不是dict2)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-20 19:35:58 | 显示全部楼层
本帖最后由 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)

吗?为什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-23 03:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表