0

「factors.py」と「primes.py」の 2 つのモジュールがあります。「factors.pyc」には、数値のすべての素因数を見つける関数があります。その中で、「primes.py」から 2 つの関数をインポートします。「primes.py」に辞書があり、これはグローバルとして宣言されています(定義される前に)。「factors.py」のコードで使用しようとすると、次のエラーが発生します。

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    pFactors(250)
  File "D:\my_stuff\Google Drive\Modules\factors.py", line 53, in pFactors
    for i in primes_dict:
NameError: global name 'primes_dict' is not defined

ここに私のコードがあります:

「factors.py」では:

def pFactors(n):
   import primes as p
   from math import sqrt
   from time import time
   pFact, primes, start, limit, check, num = [], [], time(), int(round(sqrt(n))), 2, n
   if p.isPrime(n):
      pFact = [1, n]
   else:
      p.prevPrimes(limit)
      for i in primes_dict:
         if primes_dict[i]:
            primes.append(i)
   #other code

そして「primes.py」では:

def prevPrimes(n):
    if type(n) != int and type(n) != long:
        raise TypeError("Argument <n> accepts only <type 'int'> or <type 'long'>")
    if n < 2:
        raise ValueError("Argument <n> accepts only integers greater than 1")
    from time import time
    global primes_dict
    start, primes_dict, num = time(), {}, 0
    for i in range(2, n + 1):
        primes_dict[i] = True
    for i in primes_dict:
        if primes_dict[i]:
            num = 2
            while (num * i < n):
                primes_dict[num*i] = False
                num += 1
    end = time()
    print round((end - start), 4), ' seconds'
    return primes_dict #I added this in based off of an answer on another question, but it still was unable to solve my issue

prevPrimes(n)意図したとおりに動作します。ただし、にアクセスできないためprimes_dictpFactors(n)機能しません。

primes_dict(あるモジュールで作成された) 辞書を別のモジュールで使用するにはどうすればよいですか? 前もって感謝します。

4

1 に答える 1

2

で定義されたprimesものはすべて、あなたの名前で表示importされます。としてインポートしたのでp、としてprimes_dictアクセスできますp.primes_dict。あなたが望むなら、あなたはすることができます

from primes import primes_dict

最上位の名前として使用します。

于 2012-11-24T01:36:52.400 に答える