【问题标题】:What does "variable or 0" mean in python?python中的“变量或0”是什么意思?
【发布时间】:2012-08-31 10:23:28
【问题描述】:

以下语句在python中是什么意思:

x = variable_1 or 0

variable_1 是一个对象。 x 上面有什么值?还有x的类型是什么?

【问题讨论】:

  • try None, 1, 0, "", [], {} .... 有时,(a and b or c) 可以在 c- 中用作 (a?b:c)语言。
  • @fanlix 但只是有时。 b if a else c 更好,因为如果 b 为假,a and b or c 的计算结果为 c。

标签: python variables


【解决方案1】:

如果 variable_1 计算结果为 False ,则 x 设置为 0,否则设置为 variable_1

把它想象成

if variable_1:
  x = variable_1
else:
  x = 0

【讨论】:

  • 不只是None 或False - 任何虚假的东西。
  • 更正确的是:如果variable_1 是None 或False 或0,如果__len__ 存在于该对象上并返回0,如果non_zero存在于该对象上并返回0 或False。希望我没有忘记什么。
  • 它实际上是 __nonzero__ ;-) 或者,在 Python 3 中,拼写 __bool__ 要容易得多。
  • @BigYellowCactus 只要说“如果variable_1 是假的”或者“是假的表达”等等。
【解决方案2】:

如果variable_1 评估为假,x 将为0,否则为variable_1

>>> 'abc' or 0
'abc'
>>> '' or 0
0
>>> ['a', 'b', 'c'] or 0
['a', 'b', 'c']
>>> [] or 0
0

【讨论】:

  • 从语义上讲,你可以在 Python/Perl/Ruby 中看到很多这种模式 setting = user_specified_option or default。
【解决方案3】:

如果x的值不是None或False,则x将被初始化为variable_1

简单的例子:

>>> a = None
>>> b = 2
>>> a or 0
0
>>> b or 0
2

【讨论】:

  • 有点吹毛求疵:如果variable_1是[],那么x会变成0,因为即使variable_1既不是None也不是False,它会评估到False
  • 绝对,我忘了提。 jamylak 的答案更好
【解决方案4】:
x = variable_1 or 0

这意味着如果variable_1 的计算结果为False(即它被认为是“空的” - 请参阅魔术方法__nonzero__ 的文档),那么0 将分配给x。

>>> variable_1 = 'foo'
>>> variable_1 or 0
'foo'
>>> variable_1 = ''
>>> variable_1 or 0
0

相当于“如果 variable_1 设置为任何非空值,则使用其值,否则使用 0”。

x 的类型是 variable_1 或 int 的类型(因为 0 是 int)。

【讨论】:

  • 虚假事物不一定是“空”事物,即使所有内置序列和映射类型都是虚假的,当且仅当它们为空时。例如,False 和 0 都是错误的,但将数字类型称为“空”并没有多大意义。
猜你喜欢
  • 2012-06-26
  • 1970-01-01
  • 2016-04-22
  • 1970-01-01
  • 2015-03-20
  • 2020-01-07
  • 2011-08-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多