[python] “설정”모듈을 사용하여 상수를 만드시겠습니까?

저는 비교적 Python에 익숙하지 않습니다. 다양한 응용 프로그램 별 상수가 저장 될 “설정”모듈을 만들려고합니다.

내 코드를 설정하는 방법은 다음과 같습니다.

settings.py

CONSTANT = 'value'

script.py

import settings

def func():
    var = CONSTANT
    # do some more coding
    return var

다음과 같은 Python 오류가 발생합니다.

global name 'CONSTANT' is not defined.

Django의 소스 코드에서 settings.py파일에 저와 같은 이름의 상수 가 있음을 알았습니다 . 스크립트로 가져오고 응용 프로그램을 통해 참조 할 수있는 방법에 대해 혼란 스럽습니다.

편집하다

모든 답변에 감사드립니다! 다음을 시도했습니다.

import settings

print settings.CONSTANT

같은 오류가 발생합니다

ImportError: cannot import name CONSTANT



답변

가장 쉬운 방법은 설정을 모듈로 만드는 것입니다.

(settings.py)

CONSTANT1 = "value1"
CONSTANT2 = "value2"

(consumer.py)

import settings

print settings.CONSTANT1
print settings.CONSTANT2

파이썬 모듈을 가져올 때 모듈 이름을 가져 오는 변수 앞에 접두사를 붙여야합니다. 주어진 파일에서 사용하려는 값을 정확히 알고 있고 실행 중에 변경되는 것에 대해 걱정하지 않는다면 다음을 수행 할 수 있습니다.

from settings import CONSTANT1, CONSTANT2

print CONSTANT1
print CONSTANT2

그러나 나는 그 마지막 것에 휩쓸 리지 않을 것입니다. 코드를 읽는 사람들이 값의 출처를 파악하기 어렵게 만듭니다. 다른 클라이언트 모듈이 값을 변경하면 해당 값이 업데이트되지 않도록합니다. 이를 수행하는 마지막 방법은

import settings as s

print s.CONSTANT1
print s.CONSTANT2

이렇게하면 입력을 절약하고 업데이트를 전파하며 독자 만 s설정 모듈에서 가져온 내용 임을 기억하면 됩니다.


답변

1 단계 : 더 쉽게 액세스 할 수 있도록 동일한 디렉토리에 settings.py 파일을 새로 만듭니다.

#database configuration settings

database = dict(
    DATABASE = "mysql",
    USER     = "Lark",
    PASS     = ""
)

#application predefined constants

app = dict(
    VERSION   = 1.0,
    GITHUB    = "{url}"
)

2 단계 : 설정 모듈을 애플리케이션 파일로 가져 오기.

import settings as s            # s is aliasing settings & settings is the actual file you do not have to add .py 

print(s.database['DATABASE'])   # should output mysql

print(s.app['VERSION'])         # should output 1.0

s와 같은 별칭을 사용하지 않으려면 다른 구문을 사용할 수 있습니다.

from settings import database, app

print(database['DATABASE'])   # should output mysql

print(app['VERSION'])         # should output 1.0

두 번째 가져 오기 방법에서 dict 이름을 직접 사용할 수 있습니다.

큰 파일이 있고 응용 프로그램에서 대부분의 설정을 사용할 경우 *를 사용하여 설정 파일모든 코드를 가져올있는 작은 팁

from settings import *      # * represent all the code on the file, it will work like step 2


print(database['USER'])       # should output lark

print(app['VERSION'])         # should output 1.0

도움이 되었기를 바랍니다.


답변

당신이 때 import settings하는 module라는 개체가 settings전역 네임 스페이스에 배치됩니다 -이 객체가 수행하는이 있었다있다 settings.py속성과. 즉 외부의 settings.py, 당신은 참조 CONSTANTsettings.CONSTANT.


답변

settings.py를 그대로두면 Django처럼 사용할 수 있습니다.

import settings

def func():
    var = settings.CONSTANT


답변

당신이 경우 … 아니면 정말 settings.py에서 모든 상수는 전역 네임 스페이스로 가져올 수 싶어, 당신은 실행할 수 있습니다

from settings import *

…하지만 다른 settings.CONSTANT모든 사람들이 여기서 언급했듯이를 사용하는 것은 매우 옳습니다.


답변

내가 게시 한 답변을 참조하십시오 Python에서 객체를 수정하는 것을 방지 할 수 있습니까? 원하는 것을 수행합니다 (대문자 식별자 사용을 강요합니다). 실제로 다른 질문보다이 질문에 대한 더 나은 답변 일 수 있습니다.


답변

나는 파이썬에서 처음이지만 setings.py의 함수와 같은 상수를 정의하면

def CONST1():
    return "some value"

main.py

import setings

print setings.CONST1() ##take an constant value

여기서는 값을 변경할 수 없지만 기능처럼 작동합니다.