Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.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中的关键字?_Python - Fatal编程技术网

&引用;“存在”;Python中的关键字?

&引用;“存在”;Python中的关键字?,python,Python,我最近为蟒蛇制作了以下示例。。。其他: def isPrime(element): """ just a helper function! don't get religious about it! """ if element == 2: return True elif element <= 1 or element % 2 == 0: return False else: for i in xrange(

我最近为蟒蛇制作了以下示例。。。其他:

def isPrime(element):
    """ just a helper function! don't get religious about it! """
    if element == 2:
        return True
    elif element <= 1 or element % 2 == 0:
        return False
    else:
        for i in xrange(3, element, 2):
            print i
            if element % i == 0:
                return False
    return True


myList = [4, 4, 9, 12]

for element in myList:
    if isPrime(element):
        break
else:
    print("The list did not contain a prime.")
它得到了懒惰的评价

Python中是否存在类似exists关键字的内容?还是有人为此打气

myList = [4, 4, 9, 12]

if not any(isPrime(x) for x in myList):
    print("The list did not contain a prime")
Python还有
all()
,它可以遍历任何序列,如果所有元素的值都为True,则返回
True

any();如果
all()
发现任何计算结果为false的元素,它将停止并返回
false

两者都是“懒惰”的,因为它们使用Python迭代一次提取一个值。例如:

import random
def rand_sequence(n_max):
    while True:
        next_random = random.randint(0, n_max)
        print(next_random)
        yield next_random

all(isPrime(x) for x in rand_sequence(20))
这将迭代直到找到非素数,然后返回
False
。它打印数字作为副作用,这样你就可以看到它的工作。我刚试过这个,得到:

17
3
0
另外,我在一次Python会议上参加了一次演讲,演讲者提到他通常使用
any()
作为一种非常有效的循环方式。
for
循环为每个循环重新绑定循环变量,但是
any()
不会这样做;它只是不断地检查值。因此,如果将
any()
与一个总是返回
None
或假值的函数一起使用,它将一直迭代到序列的末尾,根据那个家伙的说法,这是Python中最快的方法。(如果函数返回的值不是
None
且不是false,则可以使用
all()
执行相同的技巧。函数不起作用的唯一时间是有时返回真值,有时返回假值。但可以强制它始终起作用:

any(my_function(x) and False for x in sequence)
p.p.S.让我们使用
all()
重写
isPrime()
!我将名称更改为
is_prime()
,以符合PEP 8的要求

def为素数(元素):
“只是一个辅助函数!不要太相信它!”
如果元素==2:
返回真值

elif元素我没有意识到
any
all
短路!太好了。是的,短路行为是使用
reduce()的最大优势
使用逻辑AND或逻辑or运算符。请注意,虽然两者都短路,但表达式中的惰性是通过使用生成器表达式提供的。如果Python开发人员真的很笨,
any()
all()
可以调用
list()
在迭代器上,然后它就不再懒惰了。使用Python迭代器接口会使函数变得懒惰,IMHO。(如果Python开发人员如此愚蠢,我的
rand_sequence()
示例会爆炸,因为如果你允许,生成器将永远运行;注意
while True:
循环。)当然,有些函数不能是惰性的;
sorted()
浮现在脑海中。试试
x=sorted(rand\u sequence(20))
并观察副作用的打印数字。您甚至不需要计算迭代器。您可能想在
元素%2==0
之前检查
元素==2
;当前者为真时,后者始终为真。谢谢,我已经更正了它。但这只是一个可以使用它的场景的示例。这是ju这是一个列表理解,而不是短路行为。只有代码的答案通常不会解释任何事情。我建议在不久的将来添加一个解释,这样这篇文章就不会被更多人否决。
any(my_function(x) and False for x in sequence)
def is_prime(element):
    """ just a helper function! don't get religious about it! """
    if element == 2:
        return True
    elif element <= 1 or element % 2 == 0:
        return False
    else:
        return all(element % i for i in xrange(3, element, 2))
[x for x in myList if isPrime(x)]