我使用我隐约明白的枚举函数来看到这个主筛,我理解了代码背后的一般思想,即将所有非素数值转换为' True'错误'错误'然后从中创建一个主要列表。但是我不确定如何解释第5行之后的代码,is_prime是函数还是变量?我有点困惑
def prime_sieve(n):
sieve = [True] * n #Generates a list of 'True' of length n
sieve[:2] = [False, False] # 0 and 1 are not primes
primes = []
for prime, is_prime in enumerate(sieve):
if not is_prime:
continue
primes.append(prime)
for not_prime in range(prime*prime, n, prime):
sieve[not_prime] = False
return primes, sieve
答案 0 :(得分:2)
def prime_sieve(n):
sieve = [True] * n #Generates a list of 'True' of length n
sieve[:2] = [False, False] # 0 and 1 are not primes
primes = []
声明函数,设置变量。 Sieve是一个布尔值列表,用于表示给定指数的数量是否为素数。 Primes设置为到目前为止找到的空列表。
for prime, is_prime in enumerate(sieve):
迭代所有数字的枚举列表,以及它们的布尔对应物。枚举就像迭代列表,但也有所有列表变量的索引。由于enumerate为每个列表元素提供了两个变量,因此需要使用两个变量来解压缩它。 '黄金'将是一个数字,正在访问的列表元素的索引,' is_prime'是该索引的布尔值。
if not is_prime:
continue
如果之前已声明某个号码不是素数,则跳过它。
primes.append(prime)
如果没有,请将其添加到已找到的素数列表中。
for not_prime in range(prime*prime, n, prime):
sieve[not_prime] = False
从素数广场开始到最后,所有可被素数整除的数字都设为False
return primes, sieve
返回所有素数的列表,以及筛子中所有数字的布尔列表。
答案 1 :(得分:1)
试试这个:
var module = new Module(
(object sender, Args a) => { return something; }
)
你现在明白了吗?
答案 2 :(得分:1)
如果is_prime
是一个函数,则它不会是False
,因此无论not is_prime
是什么,False
总是会返回is_prime
。请注意,函数和函数返回之间存在差异;如果is_prime
是一个函数,则is_prime()
将是is_prime()
返回的内容,可以是False
,但is_prime
将是函数对象本身,这是不是False
。一个函数可以返回 False
,但它不能 False
。