Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 Python列表理解和条件顺序_Python 2.7 - Fatal编程技术网

Python 2.7 Python列表理解和条件顺序

Python 2.7 Python列表理解和条件顺序,python-2.7,Python 2.7,以下列表理解之间是否存在差异: 一, 二, 简短的回答不,长的回答稍微 当你写下如下内容时: f = [(x,y) for x in range(a) if x > 0 for y in range(b)] f = [(x,y) for x in range(a) for y in range(b) if x > 0] 然后您可以将其重写为以下内容,我将其称为p1: for x in range(a): if (x > 0): for y in ra

以下列表理解之间是否存在差异:

一,

二,


简短的回答不,长的回答稍微

当你写下如下内容时:

f = [(x,y) for x in range(a) if x > 0 for y in range(b)]
f = [(x,y) for x in range(a) for y in range(b) if x > 0]
然后您可以将其重写为以下内容,我将其称为p1:

for x in range(a):
    if (x > 0):
        for y in range(b):
            f.append((x, y))
print f
当你写下如下内容时:

f = [(x,y) for x in range(a) if x > 0 for y in range(b)]
f = [(x,y) for x in range(a) for y in range(b) if x > 0]
然后您可以将其重写为以下内容,我将其称为p2:

for x in range(a):
    for y in range(b):
        if (x > 0):
            f.append((x,y ))
print f
我这样重写是因为它更容易理解

我应该注意到,我不建议在for循环中使用for循环,因为处理代码变得越来越困难,只在确实需要的时候使用它

在p1中,它将在运行下一个for循环之前检查x是否大于0

这样做的好处是,如果x>0,您甚至不必运行流程的其余部分,从而节省了时间。它不会检查y的新值,因为您告诉它它没有必要

p2必须先运行这两个for循环,然后才能决定x是否大于0。这不如p1有效

关键区别在于p1应该比p2更有效,因为它节省时间。最后,它们都给出了相同的结果

p1中发生的情况称为短路。但这并不像在电子领域那样是件坏事。短路只是意味着要进行布尔检查,以确定是否有必要对语句的其余部分求值

让我们假设我们必须使用布尔值x和y。x设置为false,而y设置为true。我们可以评估以下陈述:

if x && y:
    print 'Hello World!'
if y || x:
    print 'Hello World!'
&&和运算符首先检查x是否为真。如果x为false,则没有理由继续,因为&&运算符要求这两条语句都为true。我们在这里短路,因此不计算y,也不运行打印功能

让我们再次使用相同的布尔值。我们可以评估以下陈述:

if x && y:
    print 'Hello World!'
if y || x:
    print 'Hello World!'
因为y的计算结果为true,所以它不会计算x。| |运算符只需要一个true boolean语句,因为y为true,所以它不会计算x

这有一个很好的特性,我们可以在操作符的右侧“隐藏”语句。如果正确的语句可能会使程序崩溃(如sqrt-1,其中-1是用户输入),这将非常好

如果您想阅读更多关于短路评估的内容,那么您可以阅读更多关于短路评估的内容