programing

Python 파일로 긴 상수 목록 가져오기

newsource 2023. 9. 7. 21:43

Python 파일로 긴 상수 목록 가져오기

파이썬에는 다음과 같은 유사점이 있습니다.C다음과 같은 전처리기 문:

#define MY_CONSTANT 50

또한 여러 클래스에 가져올 상수 목록도 많이 있습니다.위와 같이 상수를 긴 순서의 문장으로 선언하는 아날로그가 있습니까?.py파일 및 다른 파일로 가져오기.py파일?

편집.

파일을Constants.py다음과 같이 읽힙니다.

#!/usr/bin/env python
# encoding: utf-8
"""
Constants.py
"""

MY_CONSTANT_ONE = 50
MY_CONSTANT_TWO = 51

그리고.myExample.py다음과 같이 읽힙니다.

#!/usr/bin/env python
# encoding: utf-8
"""
myExample.py
"""

import sys
import os

import Constants

class myExample:
    def __init__(self):
        self.someValueOne = Constants.MY_CONSTANT_ONE + 1
        self.someValueTwo = Constants.MY_CONSTANT_TWO + 1

if __name__ == '__main__':
    x = MyClass()

편집.

컴파일러로 부터,

이름 오류: "글로벌 이름 'MY_CONSTANT_ONE'이(가) 정의되지 않았습니다.

13번째 줄에 있는 나의 예제에서 init 기능을 합니다.일부 ValueOne = 상수.MY_CONSTANT_ONE + 1 복사 출력 프로그램이 0.06초 후 코드 #1로 종료되었습니다.

파이썬은 전처리가 안 돼요.당신은 그냥 파일을 만들 수 있습니다.myconstants.py:

MY_CONSTANT = 50

다음과 같이 가져올 수 있습니다.

import myconstants
print myconstants.MY_CONSTANT * 2

Python에는 전처리기가 없고 상수를 변경할 수 없다는 의미에서 상수도 없습니다. 항상 상수 개체 속성을 변경할 수 있지만(거의 상수를 에뮬레이트할 수 있지만), 상수를 위해 이 작업을 수행하는 것은 거의 수행되지 않으며 유용하다고 간주되지 않습니다.상수를 정의할 때, 우리는 대문자와 소문자로 된 이름을 정의하고 그것을 "우리는 모두 여기서 어른들에게 동의합니다"라고 부릅니다. 어떤 제정신인 사람도 상수를 바꾸지 않을 것입니다.물론 아주 좋은 이유가 있고 자신이 무엇을 하고 있는지 정확히 알지 못하는 한, 이 경우 어느 쪽이든 그를 막을 수 없고, 또 그렇게 해서도 안 됩니다.

물론 모듈 수준 이름을 값으로 정의하여 다른 모듈에서 사용할 수도 있습니다.이것은 상수나 다른 것에 특정한 것이 아닙니다. 모듈 시스템에서 자세히 읽으십시오.

# a.py
MY_CONSTANT = ...

# b.py
import a
print a.MY_CONSTANT

물론 당신은 다음과 같이 할 수 있습니다.

# a.py
MY_CONSTANT = ...

# b.py
from a import *
print MY_CONSTANT

물론이죠, 상수를 별도의 모듈에 넣을 수 있습니다.예를 들어,

const.py :

A = 12
B = 'abc'
C = 1.2

main.py :

import const

print const.A, const.B, const.C

위에서 선언한 바와 같이,A,B그리고.C는 변수입니다. 즉, 실행 시간에 변경할 수 있습니다.

"설정" 모듈을 사용하여 상수 만들기를 확인해 보시겠습니까?Python에서 객체를 수정하는 것을 방지할 수 있습니까?

또 다른 유용한 링크: http://code.activestate.com/recipes/65207-constants-in-python/ 은 다음 옵션에 대해 알려줍니다.

from copy import deepcopy

class const(object):

    def __setattr__(self, name, value):
        if self.__dict__.has_key(name):
            print 'NO WAY this is a const' # put here anything you want(throw exc and etc)
            return deepcopy(self.__dict__[name])
        self.__dict__[name] = value

    def __getattr__(self, name, value):
        if self.__dict__.has_key(name):
            return deepcopy(self.__dict__[name])

    def __delattr__(self, item):
        if self.__dict__.has_key(item):
            print 'NOOOOO' # throw exception if needed

CONST = const()
CONST.Constant1 = 111
CONST.Constant1 = 12
print a.Constant1 # 111
CONST.Constant2 = 'tst'
CONST.Constant2 = 'tst1'
print a.Constant2 # 'tst'

따라서 이런 클래스를 만든 다음 contants.py 모듈에서 가져올 수 있습니다.이렇게 하면 값이 변경되거나 삭제되지 않도록 할 수 있습니다.

여러 답변에서 설명한 가져오기 방법을 사용하는 대신 구성 파서 모듈을 살펴봅니다.

ConfigParser 클래스는 Microsoft Windows INI 파일에서 찾을 수 있는 것과 유사한 구조를 제공하는 기본 구성 파일 파서 언어를 구현합니다.이를 통해 최종 사용자가 쉽게 사용자 지정할 수 있는 파이썬 프로그램을 작성할 수 있습니다.

my_month.py declarate constant와 같은 이름의 constant 파일을 만듭니다.

CONSTANT_NAME = "SOME VALUE"

코드 가져오기 파일의 상수에 액세스하는 경우

import my_constants as constant

그리고 상수 값을 - 로 접근합니다.

constant.CONSTANT_NAME

상수처럼 보이는 변수만 원하는 것이 아니라 상수를 원하는 경우에는 불변 사전을 사용하는 것이 일반적인 방법입니다.유감스럽게도 아직 내장되어 있지 않아서 타사 레시피(이것저것)를 사용해야 합니다.

상용 소프트웨어에서 상수는 종종 많은 폴더를 깊이 묻습니다.최상의 결과를 위해 아래 솔루션을 위 솔루션과 함께 사용합니다.제게 도움이 된 구문은 다음과 같습니다.

folder_a
    folder_b
        constants.py
# -----------
# constants.py
# ------------
MAXVAL = 1000

folder_c
    folder_d
        my_file.py

# ------------------------
# my_file.py
# ------------------------
import folder_a.folder_b.constants as consts

print(consts.MAXVAL)

좀 더 최근 판에서는 좀 더 까다로워 보입니다.

상단답안의 모드

Main.py

import constants
print(token)

constants.py enter code heretoken "token "12345"

실패했습니다. 대신 상수에서 개별 변수를 가져와야 했습니다.

Main.py

from constants import token
print(token)

A constants.py파일도 좋지만, 파일 위에 상수를 올려놓고 싶은 상황이 생겼습니다.

키 "Python dict"로 변수에 .dict['A']import와 한 구문을 했습니다. , 와 한 을 했습니다 이 했습니다 이 을 .

콜라보( Collab) 있었습니다..ipynb수 .constants.pyCollab에서 Collab을 않습니다..ipynb파일을 작성합니다. )

from dataclasses import dataclass

@dataclass
class Constants:
    A = "foo"

cst = Constants()
print(cst.A)
>>> "foo"

인 파이썬 인 을 도 만들 수 .Class, 하지만 이것은 A를 정의할 필요가 있습니다.__init__

이것이 제 해결책입니다.

Sum 디렉토리 구조

project
|-- package1
|   |-- param1.py
|
|-- package2
|   |-- somefile.py
|
|-- main.py
|-- param2.py

param1.py

MY_CONST = 'abc'

param2.py

MY_CONST = 'xyz'

somefile.py

from package1 import param1

my_var = "inside some file " + param1.MY_CONST

main.py

from package1 import param1
import param2
from package2 import somefile

print(param1.MY_CONST)
print(param2.MY_CONST)
print(somefile.my_var)

main.py 실행

결과:

abc
xyz
inside some file abc

보시다시피 다른 패키지의 const를 사용할 수 있습니다.이것이 다른 사람들에게 도움이 되길 바랍니다!!

언급URL : https://stackoverflow.com/questions/6343330/importing-a-long-list-of-constants-to-a-python-file