我一直在Swift中使用功能强大的返回封闭功能

时间:2019-08-30 07:38:43

标签: python swift

我一直在尝试使用Python 3.7.4模仿的Function is Swift。这是Swift的isPrime函数:

func isPrime(_ number: Int) -> Bool {
return number > 1 && !(2..<number(.contains {number % $0 == 0}

我想要类似上面的“ 1-liner”返回,但是在Python 3.7.4中

我已经尝试了一切,但没有成功。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

您可以尝试以下方法:

import math

def isPrime(n):
  return n in [2,3] or (n >= 5 and all(n % i for i in ([2, 3] + list(range(3, int(math.sqrt(n)) + 1, 2)))))

以下是一些测试:

print (isPrime(0))  #False
print (isPrime(4))  #False
print (isPrime(8))  #False
print (isPrime(9))  #False
print (isPrime(33)) #False

print (isPrime(2))  #True
print (isPrime(3))  #True
print (isPrime(5))  #True
print (isPrime(11)) #True
print (isPrime(59)) #True

您还可以使用素数的the属性,它们全都可以写成6 * x + 16 * x - 1,其中x是一个正整数,以便该功能更具性能:

def isPrime(n):
  root = int(math.sqrt(n)) + 1
  return n in [2,3] or (n >= 5 and all(n % i for i in ([2, 3] + list(range(5, root, 6)) + list(range(7, root, 6)))))

更短(但效率较低)可能是:

def isPrime(n): 
  return n>1 and not {i for i in range(2,n) if n%i==0}