2013-05-11 3 views
8

main에 전역 변수, 즉 main 함수에서 호출하는 함수에서 사용할 수있는 변수를 정의하려고합니다.main 함수에서 전역 변수 python

그럴 수 있습니까? 이것을하기위한 좋은 방법은 무엇입니까?

감사합니다.

+1

방금 ​​인수로에서 그 변수를 전달할 수 없습니다? –

+0

그래, 그럴 수는 있어도, 주된 함수 안에 글로벌 변수를 정의 할 수 있는지, 아니면 나쁜 생각 일지를 알아 내려고 노력한 것 뿐이다. – Dnaiel

+0

일단 긴 코드를 사용하면 전역 변수가 성가 시게된다. 그러나 더 작은 코드의 경우에는 문제가 없습니다. – astronautlevel

답변

2

내부에의 메소드 (예 : main)가 정의에 의해 로컬로 작성된 변수입니다. 그러나 메소드 외부에 전역 변수를 작성하고 다른 메소드에서 값을 액세스하고 변경 할 수 있습니다.

값을 변경하려면 global 키워드를 사용하십시오.

+0

내부에서 변수를 정의하려고합니다. 메인에서 호출하는 다른 함수에서 사용할 수있는 주요 함수. 어쩌면 당신 말이 맞아요. 주된 것이 방법 일 뿐이니까. – Dnaiel

+0

@Dnaiel 당신은 매개 변수를 사용하여 프로그램의 다른 부분간에 통신 할 수 있습니다. 함수 내부에서 전역 변수를 정의 할 수있는 방법을 모르겠습니다. – Levon

+0

감사합니다. – Dnaiel

9

원하는 것을 선택할 수 없습니다 *. 글로벌 네임 스페이스에 변수를 만들면됩니다.

myglobal = "UGHWTF" 

def main(): 
    global myglobal # prevents creation of a local variable called myglobal 
    myglobal = "yu0 = fail it" 
    anotherfunc() 

def anotherfunc(): 
    print myglobal 

이렇게하지 마십시오.

함수의 전체적인 점은 매개 변수를 취한다는 것입니다. 함수에 매개 변수를 추가하기 만하면됩니다. 많은 기능을 수정해야하는 경우 클래스에 수집해야 함을 나타냅니다.

* 이유가 무엇인지 자세히 설명합니다. 파이썬의 변수는 선언되지 않았습니다. 할당 문이 실행될 때 만들어집니다. 이것은 (astronautlevel 게시 한 코드에서 파생 된) 다음과 같은 코드가 중단된다는 것을 의미합니다 :

def setcake(taste): 
    global cake 
    cake = taste 
def caketaste(): 
    print cake #Output is whatever taste was 

caketaste() 

Traceback (most recent call last): 
    File "prog.py", line 7, in <module> 
    caketaste() 
    File "prog.py", line 5, in caketaste 
    print cake #Output is whatever taste was 
NameError: global name 'cake' is not defined 

caketaste가 호출 될 때, cake에는 할당이 발생하지 않았기 때문에이 발생합니다. setcake이 호출 된 후에 만 ​​발생합니다. 당신은 global 문을 사용할 필요가 http://ideone.com/HBRN4y

1

:

현재 위치 오류를 볼 수 있습니다. 이들은 비교적 간단합니다. 이렇게하려면 변수 자체를 정의하기 전에 변수를 전역 변수로 정의하면됩니다. 예를 들어 :

def setcake(taste): 
    global cake 
    cake = taste 
def caketaste(): 
    print cake 
setcake('tasty') 
caketaste() #Output is tasty 

편집 : 죄송합니다, 내가 질문을 오해 것 같다. 지금 내가 올바르게 응답하도록 해주세요.

def printcake(): 
    print cake #This function prints the taste of cake when called 
def setcake(taste, printq): 
    global cake #This makes sure that cake can be called in any function 
    cake = taste #sets cake's taste 
    if printq: #determines whether to print the taste 
     printcake() 
setcake('good', True) #Calls the function to set cake. Tells it to print result. The output is good 

코드와 같이 출력 : http://ideone.com/dkAlEp

+1

'setcake' 전에'caketaste'를 호출하면 어떻게 될까요? – Marcin

관련 문제