【问题标题】:Python Function - Dictionary as Input - Return Error - Interesting BehaviorPython 函数 - 字典作为输入 - 返回错误 - 有趣的行为
【发布时间】: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 没有海象赋值语法(至少现在还没有)。

标签: python list function dictionary return


【解决方案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 提到的表达式之间的区别。stackoverflow.com/questions/4728073/…
  • 我编辑了我的答案以反映表达式也是语句但 return 需要一个表达式的事实。
【解决方案2】:

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

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

【讨论】:

  • 啊!我知道了。你是对的,输入确实是一个不好的参数名称!非常感谢您指出我的错误!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-07
  • 2018-09-26
  • 1970-01-01
相关资源
最近更新 更多