5

我继承了一些看起来像这样的 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 文档中阅读它?

谢谢!

4

6 回答 6

13

几乎。如果它不评估为 false ,它会说使用 name 。评估为假的事情包括但不限于:

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

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

于 2010-11-08T14:37:38.170 回答
7

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

于 2010-11-08T14:38:34.370 回答
1

启动 Python 控制台:

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

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

于 2010-11-08T14:39:27.417 回答
1

正确,该成语采用第一个计算结果为 True 的值(通常不是 None)。小心使用,因为有效值(如零)可能会在不经意间被遗弃。更安全的方法是:

if name is not None:
  # use name

或者

name if name is not None else code
于 2010-11-08T14:42:16.350 回答
0

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

如果 x:x
否则:y

一些控制台游戏:

x = ''
y = 'roar'
x 或 y
-'roar'
x = 'arf'
x 或 y
-'arf'
x = 假
x 或 y
-'roar'

于 2010-11-08T14:40:51.920 回答
0

本着学习的精神,我想知道名称或代码参数发生了什么。这是否是说'如果它不为空则使用名称,否则使用代码'?

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

就像你的情况一样:

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

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

希望这可以帮助:=)

于 2010-11-08T14:42:13.743 回答