2010-07-29 7 views
1

그래서 혼란 스럽네요. 다른 모듈에서 사용하는 일부 기능을 포함하는 모듈이 있습니다. 다음과 같이 가져옴 :Python - 전역 변수에 함수를 지정하려면 return 함수가 전역 변수가되어야합니까?

from <module> import * 

내 모듈 안에는 주 프로그램에 전역 변수를 설정하는 기능이 있습니다.

main.py :

from functions import * 

bar = 20 
print bar 
changeBar() 
print bar 

functions.py :

지금
def changeBarHelper(variable): 
    variable = variable * 2 
    return variable 

def changeBar(): 
    global bar 
    bar = changeBarHelper(bar) 

, 이것이 단순화이지만 동일한 결과를 산출 최소 코드 :

Traceback (most recent call last): 
    File "/path/main.py", line 5, in 
     changeBar() 
    File "/path/functions.py", line 7, in changeBar 
    bar = changeBarHelper(bar) 
NameError: global name 'bar' is not defined 
+3

힌트 : 전역 변수를 사용하지 마십시오. 그들은 거대하게 나쁜 생각입니다. 이것은 왜 훌륭한 예입니다. 그들은 사용하기가 어렵습니다. 따라서 그들을 사용하지 마십시오. –

+0

전역 변수가 악합니다. import *는 악합니다. 악은 혼란을 일으킨다. –

답변

3

수행 한 방식대로 import *을 수행하는 것은 일방적 인 과정입니다. 당신이 원하는만큼 당신은 거의 같은 방식으로 이름의 무리를 가져온 :

from mymodule import foo, bar, baz, arr, tee, eff, emm 

그래서 그들은 모두 단지 import이 완료 모듈의 전역 범위에 이름이 할당됩니다. 이것이하지 않는 것은이 두 모듈의 전역 네임 스페이스를 연결하는 것입니다. globalmodule-global을 의미하며 global-to-all-modules는 의미하지 않습니다. 그래서 모든 모듈은 자신의 fubar 전역 변수를 가질 수 있으며, 하나에 할당하면 모든 모듈에 할당되지 않습니다.

다른 모듈의 이름에 액세스하려면 모듈을 가져와야합니다. 따라서이 예에서 :

def foo(var1, var2): 
    global bar 
    from mainmodule import fubar 
    bar = fubar(var1) 

함수 자체에서 가져 오기를 수행하면 순환 가져 오기를 피할 수 있습니다.

0

글쎄, 여기에 어떤 글에 댓글을 쓸 수 없으며이 해결책이 효과가 없습니다. 이 점을 좀 더 명확히하고 싶습니다.

여기에 두 개의 모듈이 있습니다

main.py :

from functions import * 

bar = 20 
print bar 
changeBar() 
print bar

functions.py : 이제

def changeBarHelper(variable): 
    variable = variable * 2 
    return variable 

def changeBar(): 
    global bar 
    bar = changeBarHelper(bar)

,이 단순화이지만, 적어도 코드입니다 동일한 결과를 산출한다 :

Traceback (most recent call last): 
    File "/path/main.py", line 5, in 
    changeBar() 
    File "/path/functions.py", line 7, in changeBar 
    bar = changeBarHelper(bar) 
NameError: global name 'bar' is not defined

자, 주어진 해결책이 나를 위해 작동하지 않습니다. 그리고 이것은 제가 정말로 해결책을 제시하고자하는 문제입니다.

0

데프 changeBar()

필요가되게합니다 :

데프 changeBar (바)

당신이 전화를 그런 식으로 changeBar

functions.py 작업 main.py에서 (바) 메인 변수의 bar 변수.평

sooo를 ...

from functions import * 

bar = 20 
print bar 
bar = changeBar(bar) 
print bar 

def changeBarHelper(variable): 
    variable = variable * 2 
    return variable 

def changeBar(bar): 
    bar = changeBarHelper(bar) 
    return bar 
관련 문제