我没有看到这个问题,我很想知道这里发生了什么。如果已经被询问并已经回答,请原谅我。
在学习Udacity课程时,讲师很快提到了他在Python代码中使用的一行,如下所示:
n = n and int(n)
他说这基本上相当于:
if n:
n = int(n)
该声明的工作方式正如他所描述的那样,但我很好奇 它是如何工作的,因为我以前从未在Python中看到过这种结构。任何人都可以解释在这个投射作业中使用and
是什么让它以这种方式工作?
此外,从未见过它,我不知道这个语句是否按照它的方式运行,这让我觉得它可能不是编写这段代码的最Pythonic方式。这是一个广为人知且被接受的快捷方式,或者当我需要做这样的事情时,我是否应该坚持使用明确的if
语句?
编辑:好的,最初的问题是重复的,并且已在别处明确回答,现在也在这里。感谢所有人的回答。我有一个最后的问题:在我的代码中我应该选择哪种方式(又名Pythonic)?
答案 0 :(得分:1)
condition1 and condition2
。
condition2
仅在condition1
通过时执行。如果n
在布尔上下文中解析为True
,则n
将通过语句int(n)
转换为int并分配给n
在布尔运算的上下文中,以下内容被视为false - False,None,所有类型的数字零,以及空字符串和容器(包括字符串,元组,列表,字典,集合和 frozensets)
来自doc
答案 1 :(得分:1)
这是由python的懒惰评估(或更准确地说,短路布尔表达式)引起的,请参阅: https://docs.python.org/2/reference/expressions.html#boolean-operations:
表达式x和y首先计算x;如果x为false,则返回其值;否则,评估y并返回结果值。