这个是否:
if key == "name" and item:
意思与此相同:
if key == "name" and if key == "item":
如果是这样,我对《深入Python》中的示例5.14感到完全困惑。key怎么可能既等于"name"又等于item呢?另一方面,“and item”是否只是在询问item是否存在作为一个变量?
这个是否:
if key == "name" and item:
意思与此相同:
if key == "name" and if key == "item":
if key == "name" and item:
如果key等于"name"且item求值为True
。
请注意,item求值为True
可以通过多种方式实现。例如,if (key == "name") and []
将求值为False
。
$b = 0;
之后,isset($b)
评估为true,但$b
是false。而isset(true)
是无意义的,而 while True
则是编写无限循环的方法。 - user395760Manoj已经很好地解释了。这里是一些补充说明。
伪代码
if key == "name" or if key == "item":
应该是这样的:
if key == "name" or key == "item":
一个有趣的惯用语来实现它是:
if key in ("name", "item"):
但是它对于非常大的条件更有用,您只需知道某个值是否等于列表中的任何其他值。
x == y
z
if 3 < x < 6
等同于
if x > 3 and x < 6
)
假设你确实需要这样做
if key == "name" and if key == item:
你可以这样做
if key == "name" == item:
name = raw_input("Enter your name: ") or "dude"
print "Hello, %s!" % name
name = raw_input("Enter your name: ")
name = name if name else "dude"
print "Hello, %s!" % name
@Manoj描述的行为是正确的,并指定了正确的等价语句。但我希望讨论短路,即评估机制。
x and y
是简写形式
if x:
return y
else:
x
evaluation goes:
if key == "name" and item:
key == "name" and item
将首先被评估。
如果 key != "name"
,那么我们将返回 False
,并且该条件会根据此值进行评估,不会发生任何操作。
但是,如果 key == "name"
,我们将返回 item
。现在,item
成为 if 循环的条件。
if item:
# action :: do something
item
也存在,那么在if块下面指定的操作将会执行。def __setitem__(self, key, item):
if key == "name" and item:
self.__parse(item)
FileInfo.__setitem__(self, key, item)
item
是一个变量,类似于key
。
如果它的值为true
或false
,则可以在if
语句中使用它。
例如:
happy = True
name = "Peter"
if name == "Peter" and happy:
print name + " is happy!"
@Victor Neo:另外,您不需要单独的布尔值:
for happy in (False, "Peter", '', "Susan" , []):
print(happy + ' is happy.' if happy else 'Everybody is bored.')
使用if语句而不是在非布尔运算中使用or
和and
更可取,这种方法在Python引入value if condition else value
之前模拟了相同的效果。