2017-08-16 10 views
3

Ich habe einige Variablen deklariert und initialisiert sie mit einem gewissen Wert in variables.pyImportieren von Variablen aus einer anderen Datei in Python

Inhalt von variables.py:

flag = 0 
j = 1 

ich diese Werte verwenden möchten, in eine andere Datei: main_file.py mag: Inhalt von main_file.py

import variables 
    if(flag == 0) : 
     j = j+1 

Allerdings erhalte ich die folgende Fehlermeldung,

NameError: name 'flag' is not defined 

Wie kann ich dieses Problem lösen?

+2

Ersetze 'flag' durch 'variables.flag' –

Antwort

5

Alles, was Sie getan haben, ist richtig, außer wenn Sie die Variablen verwenden.

In Ihrer main_file.py Datei:

if(variables.flag == 0) : 
    variables.j = variables.j + 1 

(Oder)

Verwenden Sie die folgenden Header:

from variables import * 

(Oder)

from variables import flag, j 

Ersetzen Sie alle Referenzen von Flag und j (oder eine andere Variable, die Sie aus dieser Datei verwenden möchten) durch das Präfix 'Variablen'.

Da dies nur eine Kopie der Variablen ist, werden die Werte in der variables.py nicht betroffen, wenn man sie in main_file.py ändern

1

Sie müssen die Variablen aus der Datei importieren. Sie können alle von ihnen wie folgt importieren:

from variables import * 
if(flag == 0) : 
    j = j+1 

oder eine Variable aus dem importierten Modul verweisen wie dieser variables.flag

import variables 
if(variables.flag == 0) : 
    j = j+1 

Oder sie eins nach dem anderen wie diese

from variables import flag, j 
if(flag == 0) : 
    j = j+1 

Der Import Der beste Weg ist, variables.flag mit dem Namespace variables zu verwenden, da, wenn Ihr Code wächst, Sie immer wissen können, dass die Flag-Variable kommt f aus den Modulvariablen. Dies wird Ihnen auch ermöglichen, die gleichen Variablennamen Flag in anderen Modulen zu verwenden, wie module2.flag

3

Sie entweder

import variables 

und dann Zugriff auf die vairables wie diese verwenden:

variables.flag 
variables.j 

oder Sie können Verwenden Sie:

from variables import flag, j 

und dann Zugriff auf die Variablen nur durch ihr Name.

Wichtige:

Bitte beachten Sie, dass im zweiten Fall, werden Sie mit einer Kopie der Variablen arbeiten, und sie in einem Modul modifiziert hat keine Auswirkung auf den Variablen in den anderen Modul!

0

Sie haben bereits genug Antworten, die Ihnen sagen, wie Sie Ihr Problem beheben können. Also werde ich dir sagen, wann du was benutzen musst.

Option 1: import Erhaltung Namespace

import variables 
if variables.flag == 0: 
    variables.j += 1 

Welche bevorzugt, wenn Sie viele solche flag und j aus verschiedenen Modulen haben, und Sie nicht möchten, dass der Dolmetscher zwischen jeder Version zu verwechseln.

Option 2: import in Ihren Namensraum

from variables import flag, j 
if flag == 0: 
    j += 1 

Works, wenn Sie sind sicher, dass Sie nicht Namenskonflikte haben. Ich empfehle from ... import ..., ... zu from ... import * weil im ersten Fall Sie wissen was Sie importieren. Im letzteren Fall besteht die Möglichkeit, dass Sie ein Objekt importieren, das vorhandene Objekte eines anderen Moduls mit demselben Namen überschreibt, was zu Problemen führt.

Verwandte Themen