&引用;“存在”;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)]