대용량 파일을 실행하면서 구문 분석을 수행하는이 스크립트를 작성했습니다. 파일의 모든 행에 대해 (무거운 조작을 한 후), 특정 기준을 충족하는지 확인하기 위해 점검을 추가해야하며, 추가 기준을 충족하는지 여부를 나중에 추가 처리 목록에 포함 시키십시오.Python 함수의 영구 변수
파싱을 수행하는 함수는 이미 약간 복잡해졌으며 나중에 라인 수정 및 목록 조작을 다른 함수로 변경하여 나중에 쉽게 수정할 수 있는지 궁금합니다. 내 성향은 함수에 의해 수정 된 전역 변수를 사용하는 것이지만, 일반적으로 빈약 한 형태라는 것을 알고 있습니다. 지금까지 클래스를 사용한 적이 한번도 없었지만 영구적 인 지역 변수에 관해서는 이점이 있다는 것을 모호하게 기억합니다. 스크립트의이 부분의
한 버전이 될 수있다 :
matchingLines = []
def lineProcess(line):
global matchingLines
if line.startswith(criteria):
matchingLines.append(line)
for line in myFile:
# lots of other stuff
lineProcess(line)
은 분명히이 간단한 예제에서 단지 주요 기능에 체크를하고 추가 기능을 방해하지 않는 고통의 많은 부분이 아니다. 그러나 원칙적으로, 나는 이런 종류의 일을하는 더 나은 일반적인 방법이 외부 변수를 사용하지 않고 무엇인지 궁금합니다.
EDIT : 필자가 별도의 기능을 매력적으로 느낀 이유 중 하나는 선 목록을 수집했기 때문에 다른 외부 파일을 조작하기 위해이를 사용할 것이므로 전체 운영을 감싸는 것이 편리 할 것이기 때문입니다 포함 된 모듈에서. 그러나 이것은 조숙 한 최적화라고 생각합니다.
확실히. 내가 Eevee에 대한 응답으로 썼을 때, 아마 나는 철학적 질문을하고있다. 나는 복잡성에 잘 비례하는 시스템을 갖고 싶다. 그리고 관련된 기준에 따라 나는 이런 종류의 해결책이 나를 지금까지만 받아 들일 것으로 생각한다. – glarue
File을 하위 클래스로하는 클래스로 별도의 모듈을 만들고 해당 클래스가 일치하지 않는 모든 행을 효과적으로 숨길 수 있습니다.하지만 글로벌 변수와 관련이 있는지 확신 할 수 없습니다. 왜 당신이 전혀 필요하지 않을지 생각하는 이유는 아직 명확하지 않습니다. 시스템이 어떻게 복잡해질 필요가 있는지 예를들 수 있다면 아키텍처 나 디자인 패턴이 도움이 될 수있는 몇 가지 팁을 제공 할 수 있습니다. –
예, 질문하지 않기 전에 질문하기 전의 증후군을 앓고있는 것 같습니다. 위의 모든 것이 함수 내에서 일어나기 때문에 전역 변수가 작동합니다. 일치하는 목록으로 수행해야하는 파일 처리는 여기에서 상위 함수 외부에서 발생합니다. 물론이 부모 함수가 일치하는 목록을 반환하도록 할 수는 있지만 다른 많은 내용을 다시 작성해야합니다. 그게 전혀 도움이 되나요? – glarue