2011-05-15 2 views
7

2 개의 파일 main.py 및 irc.py가 있습니다.
main.pyPython : 모듈의 주 파일에서 변수를 사용하려면 어떻게해야합니까?

import irc 
var = 1 
func() 

irc.py

def func(): 
    print var 

나는이 오류가 작동하도록하는 방법

NameError: global name 'var' is not defined

납니다 main.py를 실행하려고?

@Edit
나는 더 나은 솔루션 만이 생각 불행하게도 내가 찾은 하나는
main.py 또 다른 파일을 모두 파일로 가져 오는 것입니다

import irc 
import another 
another.var = 1 
irc.func() 

irc.py

import another 
def func(): 
    print another.var 

another.py

var = 0 

답변

10

하지 마십시오. 가능한 한 코드 분리를 시도하고 유지하십시오. 하나의 모듈은 다른 모듈의 내부 동작에 의존해서는 안됩니다. 대신 가능한 한 조금만 시도하고 노출하십시오. 이렇게하면 행동이 조금씩 달라 지도록 할 때마다 세상을 바꾸지 않아도되는 것을 방지 할 수 있습니다.

main.py

import irc 
var = 1 
func(var) 

irc.py

def func(var): 
    print var 
+0

이 인수를 추가하는 대신이 함수를 주 파일로 옮기기가 쉬울 것입니다. – gr56

+0

@ gr56 : 그러면 리팩토링이 순서대로 수행됩니다. 그것도 가능하지 않다면, 나는 단지'var' 객체를 포함하고 둘 모두에 의해 import되는 세 번째 모듈의 해결책을 가지고 갈 것입니다. 그것이 당신을 위해 일하는 경우, 자신의 질문에 대한 답변으로 게시하고 동의하십시오. –

+0

@SamirTalwar 함수에 대해이 작업을 수행 할 수 있습니다. 클래스의 인스턴스화는 어떻게됩니까? 예를 들어, 가져올 수있는 다른 모듈에서 클래스의 인스턴스를 정의하려고합니다. 인수는이 경우 자리 표시 자일 수 없습니다. –

0

음, 기능에 var에 선언되지 않았습니다. 인수로 전달할 수 있습니다. main.py

import irc 
var = 1 
func(var) 

irc.py

def func(str): 
    print str 
1

두 가지 옵션을 제공합니다.

from main import var 

def func(): 
    print var 

이렇게하면 가져 오기 모듈에 원본 이름에 대한 참조가 복사됩니다.

import main 

def func(): 
    print main.var 

이렇게하면 다른 모듈의 변수를 사용할 수 있으며 원하는 경우 변경할 수 있습니다.

func.py :

import __main__ 
def func(): 
    print(__main__.var) 

주요

+0

오, 이것은 잘못되었습니다. 상호 수입은 나에게 사기를 준다. –

+0

그럼 당신이하는 일을 모를뿐입니다. 상호 수입은 완벽하게 안전하며 명확한 제한 사항이 주어지면 잘 작동합니다. –

+0

@Ignacio : 그리고이 장난감 코드는 문제를 부각시키기 위해 고안되었습니다. 나는 그들이 진짜로 예상대로 일할 것이라는 의혹을 가지고있다. 그렇게하더라도 모듈간에 새로운 기능을 추가하고 이전 기능을 유지하는 것보다 훨씬 어려울 수있는 퍼지 라인을 권장합니다. 나는 상호 수입이 원래의 두 가지를 제공하는 세 번째 모듈보다 잘 작동하는 상황을 상상할 수 없다. –

5

글쎄, 그건 잘 작동 내 코드입니다.py :

from func import func 

var="It works!" 
func() 
var="Now it changes!" 
func() 
+0

이 솔루션이 마음에 들지만 작동합니다 ...하지만 Eclipse가 나에게 'Undefined import from variable : var 'import 된 변수 또는 함수에서 main의 오류. 이 문제를 해결할 방법이 있습니까? – user4061565

+0

[how-do-i-fix-pydev-undefined-variable-from-import-errors] (https://stackoverflow.com/questions/2112715/how-do-i-fix-pydev-undefined-variable- 수입 - 수입 - 오류) – user4061565

관련 문제