python压缩比较
我是这里的新成员,也是python的新手。我的问题是,这样的一句话有效吗python压缩比较,python,comparison,comparison-operators,Python,Comparison,Comparison Operators,我是这里的新成员,也是python的新手。我的问题是,这样的一句话有效吗 if x or y is 'whatever': 我在解释器中对此进行了测试,结果不一致。这条线似乎产生了更加一致和预期的结果 if (x or y) is 'whatever': 还是最好把所有事情都明确地列出来 if x is 'whatever' or y is 'whatever': 最后一个总是有效的,但我只是想让我的代码更加简洁,同时仍然遵循最佳实践。我试着做了一次搜索,以避免问多余的问题,但搜索“是”或
if x or y is 'whatever':
我在解释器中对此进行了测试,结果不一致。这条线似乎产生了更加一致和预期的结果
if (x or y) is 'whatever':
还是最好把所有事情都明确地列出来
if x is 'whatever' or y is 'whatever':
最后一个总是有效的,但我只是想让我的代码更加简洁,同时仍然遵循最佳实践。我试着做了一次搜索,以避免问多余的问题,但搜索“是”或“和”和“和”相当困难。提前感谢您的帮助
编辑:谢谢大家的快速回复。当我需要“或”时,这对我来说非常有效
if 'whatever' in [x,y]:
但是,如果我需要一个“和”,我该如何压缩它呢
if x == 'whatever' and y == 'whatever':
或
的工作原理与英语不同
x或y
如果x是真值,则返回x,否则返回y。如果字符串不是空的,则为true
更糟糕的是,“is”的优先级比“or”高,因此您的表达式与x或(y是“任意的”)
相同。因此,如果x不是空的,它将返回x(这将是真的,因此if将执行)。如果x为空,它将计算y为“任意”
顺便说一句:不要用“是”来比较值相等,用==
您需要此选项(可选选项):
或者更简洁,但更陌生:
if 'whatever' in [x, y]:
我认为这是可行的:
if "whatever" in (x, y):
不过有点奇怪。Python不是英语
if x or y is 'whatever':
指:
if x or (y is 'whatever'):
哪个是X是真的,或者y是“随便什么”
if (x or y) is 'whatever':
x或y
变为x或y。如果x为真,则返回x,否则变为Y。然后将其结果与“whatever”进行比较
无论如何,永远不要将字符串与is
进行比较。应使用=
比较字符串。是指不同的东西,有时是偶然发生的
您的实际请求可以写为:
if 'whatever' in [x,y]:
这将检查字符串是否在列表中[x,y]
中
if x or y is 'whatever' # this is akin to if x or (y is 'whatever')
if (x or y) is 'whatever': # (x or y) returns the first non-false value...
if x is 'whatever' or y is 'whatever': # this is valid and correct (aside from the fact you shouldn't be using `is`, see below)
你可能有
if 'whatever' in (x, y)
或者,如果条件列表较长,最好使用“”函数:
if any([condition(k) for k in list])
但在你暴露的情况下,这是过分的,因为你只想知道[x,y]中是否包含“whatever”
更新:
考虑到“is”实际上是在比较内存地址,并且(正如所指出的)在字符串上使用它不是一种好的做法。也许我在这方面做得太久了,但我不知道最后一位有多奇怪。
x或y
如果是真的,则返回x
,否则返回y
。它不会返回False
,除非x
为False且y
本身为False
@IgnacioVazquez Abrams:是的!我走得太快了,修正了。嗯,我没有发现第二个案例总是错误的,至少在翻译中是这样。这是正确的。Python版本的“x或y”返回x或y中的任意一个,而不是实际的布尔值。另外,与只在整个列表中使用in相比,您的任何构造有什么意义?而且,您仍然说在第三行使用is是有效和正确的。(好的,是的,我在这里是一个固执的人)@WinstonEwert我把我的观点说得更清楚了(希望如此!):问题是关于压缩条件语句,所以我更一般了一点;你完全正确,在这种情况下,“[x,y]中的‘whatever’就足够了。对于你的最后一个问题,答案是,如果x==y==‘whatever’
这意味着:内存中有一个字符串对象,其值为‘whatever’,名称为x的引用所指向的对象和名称为y的引用所指向的对象是同一个值为“whatever”的对象。x和y是标识符,也就是说字符串是变量的名称,其本质是指针,这些指针指向对象x和y。Python的数据模型是:x标识符,名为x的底层指针(在Python中称为引用),引用指向对象x。这样想你就不会有问题了
if any([condition(k) for k in list])