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

How can I make a list defined in one method available in another method when both methods are in the same class?

我有 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.primes 没有考虑 goodNumbers() 中附加的长数字 - 知道这是为什么吗?

您可以将列表添加为变量,您可以将数据传递给: 例如

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 )

如前所述,您可以使用 实例变量 self.primes 代替 局部变量 primes。如果您计划重用这些值,这将很有用。

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

编辑

由于问题已修改:

我刚看到你编辑的问题。那行不通:如果您使用 self.primes 在方法之间传递数据,那么您需要首先 创建 它,可能在对象初始化时,然后 通过调用primeNumber填充它,然后你可以read/modify它在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