这是:
if key == "name" and item:
与此相同:
if key == "name" and if key == "item":
如果是这样,我对example 5.14 in Dive Into Python感到困惑。键如何等于“名称”和项目?另一方面,“和项目”只是询问项目是否作为变量存在吗?
答案 0 :(得分:33)
if key == "name" and item:
表示if (key == "name") and (item evaluates to True)
。
请注意,(item evaluates to True)
可以通过多种方式实现。例如,if (key == "name") and []
将评估为False
。
答案 1 :(得分:10)
Manoj解释得很好。这里有一些补充说明。
伪代码
if key == "name" or if key == "item":
应该是这样的:
if key == "name" or key == "item":
一个有趣的习惯用语是:
if key in ("name", "item"):
但是对于非常大的条件更有用,你只想知道某个值是否等于列表中的任何其他值。
答案 2 :(得分:4)
不,你必须重复这个表达。它评估为两个独立的条件,并检查两者是否都为真 -
x == y
z
检查Python documentation以获取Python中被视为False的列表
(但有趣的是,与其他语言相反,以下内容:
if 3 < x < 6
相当于
if x > 3 and x < 6
)
答案 3 :(得分:3)
假设您确实想要
if key == "name" and if key == item:
你可以这样做
if key == "name" == item:
答案 4 :(得分:1)
其他人已经解释了如何评估你所询问的表达方式。需要知道的一件事是,如果“and”运算符的第一个操作数的计算结果为false,则永远不会计算第二个操作数,因为如果一个操作数为false,则“and”的结果总是为false,如果你知道第一个操作数是假的,那么整个“和”是假的,你不必评估第二个。这称为“短路”并适用于“或”以及“和”(除非“或”在任一操作数为真时始终为真,因此仅在第一个操作数为false时才计算第二个操作数)。 / p>
您需要知道的另一件事是整个“和”操作的结果是评估的最后一个操作数的值。由于文字常量True和False以外的东西在逻辑上都是真或假,因此在某些情况下,这个事实(与短路相结合)可以用作“if”语句的替代,并且偶尔会看到它使用那种方式。
例如,如果x为真,则“x或y”求值为x,如果x为假则求值为y。有时,这用于提供缺失值的默认值:
name = raw_input("Enter your name: ") or "dude"
print "Hello, %s!" % name
如果您没有在提示符处输入任何内容,只需按Enter键,raw_input的返回值为空字符串“”,这被视为false。由于“或”的左分支是假的,它不会短路,并且评估右分支,因此“或”的结果是“dude”。如果您在提示符处输入了值,则由于短路而不会对右分支进行评估,因此“或”的值是您输入的值。
很多人都认为滥用布尔运算符这种方式是糟糕的风格,因为Python有“x if y else z”,但是这个特殊的用法让我感觉足够可读。 (但这只是唯一一个!)“价值是这个,或者如果它是空的那么。”将其与以下内容进行比较:
name = raw_input("Enter your name: ")
name = name if name else "dude"
print "Hello, %s!" % name
答案 5 :(得分:1)
@Manoj 在描述行为时是正确的,并指定了正确的等效语句。然而,我想讨论短路,即正在评估的机制。
x and y
是
if x:
return y
else:
x
评估:
if key == "name" and item:
key == "name" and item
将首先评估。
if key != "name"
那么我们将返回 False
并根据该值评估条件并且不发生任何操作。
但是如果 key == "name"
我们将返回 item
。 item
现在成为 if 循环的条件
if item:
# action :: do something
并且如果 item
也存在,则在 if 块下指定的操作将遵循。
答案 6 :(得分:0)
如果您查看示例5.14的代码:
def __setitem__(self, key, item):
if key == "name" and item:
self.__parse(item)
FileInfo.__setitem__(self, key, item)
item
是一个变量,类似于密钥。
如果评估为if
或true
,则可以在false
语句中使用。
例如
happy = True
name = "Peter"
if name == "Peter" and happy:
print name + " is happy!"
答案 7 :(得分:0)
@Victor Neo:你也不需要单独的布尔值:
for happy in (False, "Peter", '', "Susan" , []):
print(happy + ' is happy.' if happy else 'Everybody is bored.')
如果使用or
和and
使用非布尔值,则首选使用语句,这会在value if condition else value
在Python中可用之前模拟效果。