Python 函数 - 字典作为输入 - 返回错误 - 有趣的行为

Posted

技术标签:

【中文标题】Python 函数 - 字典作为输入 - 返回错误 - 有趣的行为【英文标题】:Python Function - Dictionary as Input - Return Error - Interesting Behavior 【发布时间】:2022-01-16 19:41:56 【问题描述】:

美好的一天,精彩的 Stack Overflow 社区。当作为字典输入时,我注意到关于 Python 函数的一个有趣行为。

当我们使用空列表作为默认参数时,我们可以在附加一些值的同时返回该列表。

def func_list(value,input=[]):
    return input.append(value)

当空字典作为参数时,我希望同样的事情适用。如:

def func_dict(value,input=):
    return input[value] = value

但是,Python 会引发语法错误,我只能执行以下操作:

def func_dict(value,input=):
    input[value] = value
    return input

我想知道为什么?非常感谢!

PS。请随时修改问题,如果我的问题表达不够清楚,请见谅!

【问题讨论】:

您不能使用“=”作为回报。在这种情况下,列表也会引发异常: def func_list(value,input=[]): return input[0] = value 非常感谢您的回答!实际上 input[value] = xxx 在这种情况下是一个语句。并且 Python 不能返回语句。就像@vaizki 建议的那样! 附带说明一下,Python 现在有通过:=“walrus”运算符的赋值表达式。因此,您可以将许多赋值语句转换为表达式,但 dict 没有海象赋值语法(至少现在还没有)。 【参考方案1】:

主要区别在于input.append(value) 是一个表达式,而input[value] = value 不是(它只是一个语句)。 return 语句只能将表达式作为参数(或无参数返回None)。

你可以这样做:

def func_dict(value,input=):
    return input.update( value: value ) or input

它的工作原理是 dict.update() 返回 None 因此我们返回(现已更新)input。我知道它很丑,但想不出更好的。

【讨论】:

非常感谢您的精彩回答!它立即澄清了我的困惑! 对于以后偶然发现这篇文章的人来说,这里是一个很好的总结,说明语句和@vaizki 提到的表达式之间的区别。***.com/questions/4728073/… 我编辑了我的答案以反映表达式也是语句但 return 需要一个表达式的事实。【参考方案2】:

另一方面,input 这个词在 python 中是一个受保护的词,用于与用户交互,您可能希望使用另一个参数名,因为您在以现在的方式使用它时覆盖默认函数。

以下是有关输入的文档: https://docs.python.org/3/library/functions.html#input

【讨论】:

啊!我知道了。你是对的,输入确实是一个不好的参数名称!非常感谢您指出我的错误!

以上是关于Python 函数 - 字典作为输入 - 返回错误 - 有趣的行为的主要内容,如果未能解决你的问题,请参考以下文章

python中get函数用法

python字典

以字典作为可选参数的函数 - Python

python函数

Python 字符串字典内置函数&方法

Python字典函数在Linux上导致语法错误,但在Windows上没有[重复]