这个演员作业如何运作?

时间:2016-06-05 12:50:39

标签: python casting

我没有看到这个问题,我很想知道这里发生了什么。如果已经被询问并已经回答,请原谅我。

在学习Udacity课程时,讲师很快提到了他在Python代码中使用的一行,如下所示:

n = n and int(n)

他说这基本上相当于:

if n:
    n = int(n)

该声明的工作方式正如他所描述的那样,但我很好奇 它是如何工作的,因为我以前从未在Python中看到过这种结构。任何人都可以解释在这个投射作业中使用and是什么让它以这种方式工作?

此外,从未见过它,我不知道这个语句是否按照它的方式运行,这让我觉得它可能不是编写这段代码的最Pythonic方式。这是一个广为人知且被接受的快捷方式,或者当我需要做这样的事情时,我是否应该坚持使用明确的if语句?

编辑:好的,最初的问题是重复的,并且已在别处明确回答,现在也在这里。感谢所有人的回答。我有一个最后的问题:在我的代码中我应该选择哪种方式(又名Pythonic)?

2 个答案:

答案 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并返回结果值。

另见答案: Does Python evaluate if's conditions lazily?