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 函数 - 字典作为输入 - 返回错误 - 有趣的行为的主要内容,如果未能解决你的问题,请参考以下文章