【问题标题】:Python: multiple possible values for function argumentsPython:函数参数的多个可能值
【发布时间】:2010-11-08 14:34:53
【问题描述】:

我继承了一些如下所示的 Python 代码:

name = 'London'
code = '0.1'
notes = 'Capital of England'
ev = model.City(key=key, code=code, name=name or code, notes=notes)

本着学习的精神,我想知道name or code 参数是怎么回事。这是说'如果不为空则使用name,否则使用code'?

提供这样的多个可能参数的技术术语是什么,以便我可以在 Python 文档中阅读它?

谢谢!

【问题讨论】:

  • 我的错误 - 已编辑,抱歉。必须停止使用伪代码!

标签: python boolean-expression


【解决方案1】:

几乎。它说如果它不评估为假,则使用名称Things that evaluate to false包括但不限于:

  • False
  • 空序列 ((), [], "")
  • 空映射 ({})
  • 0
  • None

编辑在答案的评论中添加了SilentGhost提供的链接。

【讨论】:

【解决方案2】:

在 python 中,or 运算符返回第一个操作数,除非它的计算结果为 false,在这种情况下它返回第二个操作数。实际上,这将使用name,如果未指定name,则默认回退code

【讨论】:

  • 澄清or 返回其操作数的实际值,而不仅仅是TrueFalse,对于普通教育和原始问题的回答都非常重要
【解决方案3】:

启动 Python 控制台:

>>> name = None
>>> code = 0.1
>>> name or code
0.10000000000000001

如果 name 评估为 false,则表达式将评估为 code。否则将使用名称。

【讨论】:

    【解决方案4】:

    正确,该习语采用第一个计算结果为 True 的值(通常不是 None)。请谨慎使用,因为可能会无意中放弃有效值(如零)。更安全的方法是:

    if name is not None:
      # use name
    

    name if name is not None else code
    

    【讨论】:

      【解决方案5】:

      您大致正确,但“null”并不是决定性的。基本上任何将评估为假(0,假,空字符串'')的东西都会导致显示第二个字符串而不是第一个。 'x or y' 在这个意义上相当于:

      如果 x: x
      否则:是的

      一些控制台游戏:

      x = ''
      y = '咆哮'
      x 或 y
      -'咆哮'
      x = 'arf'
      x 或 y
      -'arf'
      x = 错误
      x 或 y
      -'咆哮'

      【讨论】:

        【解决方案6】:

        本着学习的精神,我想 知道这个名字是怎么回事或 代码参数。这是说'使用 如果它不为空,则命名,否则使用 代码'?

        基本上是的,但是 python 中的 Null 可能意味着不止一件事(空字符串,无..)

        就像你的情况:

        >>> name = 'London'
        >>> code = 0.1
        >>> name or code
        'London'
        >>> name = ''
        >>> code = 0.1
        >>> name or code
        0.1000....
        

        但奇怪的是函数参数有时可以是整数,有时可以是字符串。

        希望这可以帮助:=)

        【讨论】:

        • 为避免混淆,我想说这不是默认参数值的示例,它只是布尔表达式的评估。默认参数值是当您在方法 definition 中提供默认值时,例如def some_method(param1, some_flag = False): # some_flag defaults to False if omitted at call time。此外,正如其他人所说,空字符串、空列表等评估为虚假而不是 null。
        • @mikej:我从他的问题 multiple possible arguments like (this) 中了解到他在谈论 默认参数值,也许我误解了: ) 因为它依赖于函数的 this this 或 or ???
        • 我认为@AP257(OP)认为name or code 是某种特殊的参数传递语法,而实际上它是表达式的评估,并且可以在表达式可以使用的任何地方使用。
        • @mikej: 嗯,是的,也许你是对的,谢谢你的纠正:) 我会重新编辑
        猜你喜欢
        • 2014-10-12
        • 1970-01-01
        • 1970-01-01
        • 2021-06-03
        • 1970-01-01
        • 2021-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多