当两个方法都在同一个类中时,我如何使一个方法中定义的列表在另一个方法中可用?



我有two methods within the same class,我想让一个方法中的list在另一个方法中可用,我该怎么做?

下面是我的代码:
class Solution:
primes=[]
def primeNumber(self,n):
numbers = set(range(n, 1, -1))
self.primes = []
while numbers:
p = numbers.pop()
self.primes.append(p)
numbers.difference_update(set(range(p * 2, n + 1, p)))
def goodNumbers(self,f):
self.primes.append(f)
return self.primes
x=Solution()
print(x.primeNumber(100)) ##populate the list
print(x.goodNumbers(123456789)) ##return the list as populated by previous call, and with the long number appended

由于某种原因,self。质数没有考虑到goodNumbers()中附加的长数字-知道为什么会这样吗?

正如已经说过的,您可以使用实例变量self.primes而不是局部变量primes。如果您计划重用这些值,这将非常有用。

如果您只是想使用一次值,并且您希望goodNumbers调用primeNumber,那么只需在primeNumber的末尾添加return primes(当然在while循环之外)

编辑

既然问题已被修改:

我刚看到你编辑过的问题。这是行不通的:如果你使用self.primes在方法之间传递数据,那么你需要首先创建它,可能在对象初始化时,然后用primeNumber调用填充它,然后你可以在goodNumbers读取/修改它。

例如:

class Solution:
primes=[]
def primeNumber(self,n):
numbers = set(range(n, 1, -1))
self.primes = []
while numbers:
p = numbers.pop()
self.primes.append(p)
numbers.difference_update(set(range(p * 2, n + 1, p)))
def goodNumbers(self,n):
self.primes.append(7598347534)
return self.primes
x=Solution
x.primeNumber(100) ##populate the list
x.goodNumbers(123456789) ##return the list as populated by previous call, and with the long number appended

你可以将list添加为一个变量,你可以将数据传递给它:例如

def goodNumbers(self,n,primes = [] ):
newprime = ( get the next prime number )
if not newprime in primes:
primes.append( newprime )
return primes
primes = [2, 3, 5, 7, 11, 13, 17, 19]
goodnumbers( n, primes )