gpt4 book ai didi

python - Python 中的 "exists"关键字?

转载 作者:太空狗 更新时间:2023-10-29 20:37:27 25 4
gpt4 key购买 nike

我最近为 Python 制作了以下示例... else:

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.")

一位同学告诉我,这个任务可以像这样用 Scala 完成:

List(4, 4, 9, 12) exists isPrime

延迟评估。

Python 中是否存在类似 exists-keyword 的东西?或者是否有针对此的 PEP?

最佳答案

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

any()all() 都有短路评估:如果 any() 找到任何评估为真的元素,它停止并返回 True;如果 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 session 的演讲,演讲者提到他通常使用 any() 作为一种非常有效的循环方式。 for 循环会为每个循环重新绑定(bind)循环变量,但 any() 不会那样做;它只是不断检查值。因此,如果您将 any() 与始终返回 None 或假值的函数一起使用,它将一直迭代到序列的末尾,并根据伙计,这是 Python 中最快的方法。 (如果您的函数返回的值不是 None 并且不是 false,您可以使用 all() 来实现相同的技巧。唯一一次它不工作是有时函数返回一个真值,有时它返回一个假值。但是你可以强制它总是工作:

any(my_function(x) and False for x in sequence)

附言让我们使用 all() 来重写 isPrime()!我会将名称更改为 is_prime() 以符合 PEP 8。http://www.python.org/dev/peps/pep-0008/

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))

关于python - Python 中的 "exists"关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10958874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com