2013-01-21 4 views
3

저는 파이썬으로 코딩하는 초보자입니다. 자바에서 오는 나를위한 약간의 점프입니다. 지금 당장 가지고있는 질문은 상수 등을 위해 파이썬에서 전역 변수를 사용하는 것에 관한 것입니다.파이썬 전역 변수 사용

private static final HOME_URL_CONST = "localhost:8080"; 

또는 우리가 런타임에 값을 할당해야하는 경우 :

private static HOME_URL = ""; 
public void init(){ 
    HOME_URL = "localhost:8080"; 
} 

포인트가있는 것입니다 자바에서 , 우리는 종류의 우리가 이런 식으로 뭔가를 할 수 있습니다, 상수 두 가지 아이디어를 가지고 후자의 경우 정적 변수를 설정하면 설정이 유지됩니다. 그러나 파이썬에서는 그렇지 않습니다. 전역 변수를 작성한 다음 함수에 할당하면 해당 변수는 해당 함수 내에 할당 된 값만 갖게됩니다. 는 지금은 이런 일이 :

def initialize(): 
    global HOME_URL 
    with open("urls.txt", 'rb') as f: 
    HOME_URL = json.load(f.read())['urls'] 

이이 일을 허용 방법 또는 내가 잘 모르는 것 같아요 어떤 영향과 부작용이있다?

+0

인치 파이썬은 동적이며 모든 변수 값도 마찬가지입니다. 파이썬에는 '정적 최종'이 없습니다. –

+3

[유해한 것으로 간주되는 글로벌 변수] (http://c2.com/cgi/wiki?GlobalVariablesConsideredHarmful) –

답변

6

동적 변수 때문에 Python에서는 const 변수 자체의 정의가 없습니다. 상수는 스타일을 지시하고, 따라서 일반적으로 모듈 레벨에서 정의 및 밑줄이 단어를 분리 모든 대문자로 작성 PEP 8

상수에서 인용된다. 예 : MAX_OVERFLOW 및 TOTAL 당신이 변수를 원하는 경우

그래서, 다른 영역에 다른 변수가되지 않도록, 밑줄로 구분하여 대문자로, 모듈 수준에서 이름을 그것을 정의하고 규칙을 따르 상수로 사용되는 그 충돌 상수 변수와 함께. 모듈 수준에서 정의 된 변수는 함수 수준에서 범위에 속하기 때문에 어떤 경우에도 전역 한정자가 필요하지 않습니다.

그래서 괜찮 특히이 경우

HOME_URL = "localhost:8080" 
def initialize(): 
     #global HOME_URL #You don't need this 
     home_url = HOME_URL 
     with open("urls.txt", 'rb') as f: 
      #Constants are not supposed to mutate 
      home_url = json.load(f.read())['urls']