2017-10-10 4 views
3

함수 내부에서 사용할 파이썬 라이브러리를 가져 오려고한다고 가정합니다. 함수 내에서 라이브러리를 가져 오거나 전역으로 가져 오는 것이 더 나은가요?함수 내에서 파이썬 라이브러리 가져 오기와 전역 가져 오기의 차이점은 무엇입니까?

def test_func: 
    import pandas as pd 
    # code implementation 

를 수행하거나 전 세계적으로 가져 파이썬 파일의 상단에 아래의 라인을 가지고?

import pandas as pd 

각 접근법의 장단점은 무엇입니까? 파이썬에서 가장 좋은 방법은 무엇입니까?

나는 파이썬 V3.6을

편집을 사용하고 있습니다 : 어떤 해명을 만들 수 있습니다.

내가 2 개의 기능을 가지고 있다고 가정 해보십시오.

def func1: 
    import pandas as pd 
    # code implementation 

def func2: 
    import pandas as pd 
    # code implementation 

python 스크립트는 두 기능을 모두 실행합니다. 라이브러리를 두 번 가져 오거나 파이썬 컴파일러로 한 번만 가져올만큼 똑똑합니까? 이것은 성능에 영향을 미칩니다.

답변

3

이름 가시성과 실행 시점이 다릅니다. 로드중인 파일을 가져 오거나 실행하면 모듈 수준 가져 오기가 가져 오기됩니다. 함수는 함수가 실행될 때만 분명히 로컬입니다. 가져온 이름은 파일의 모든 항목에 표시되거나 가져 오기가 실행되는 함수 내에서만 볼 수 있습니다.

import 문을 치는 데 비용이 들기 때문에 (비록 작지만 여전히) 로컬 하나는 항상 번 실행됩니다. 하지만 모듈을 완전히 다시 가져 오지는 않습니다. 파이썬은 모듈을 처음 가져 오면 캐시합니다 (reloadsys.modules 참조).

명확하게 모듈 수준의 가져 오기를 사용하는 것이 가장 좋습니다. 이는 99.999 %의 코드에서 볼 수 있습니다. 커다란 이유는 유지 보수성입니다. 모듈에 어떤 의존성이 있는지 이해하고 싶다면 모든 코드를 샅샅이 뒤지는 대신에 맨 위를 보는 것이 편리합니다.

그래서 로컬 가져 오기 기능을 사용해야합니까?

  • 이전에 가져 오기를 사용할 수 없습니다

    는 세 가지 시나리오가 있습니다. 예를 들어 db 또는 다른 시스템/기능에 대한 백엔드는 구성 또는 시스템 검사를 통해 런타임에 선택됩니다.

  • 그렇지 않으면 원형 수입품을 보유하고 있습니다. 이것은 드문 경우이자 코드 냄새이기 때문에 필요한 경우 리팩토링을 고려하십시오.

  • 모듈 가져 오기를 지연하여 시작 시간을 줄입니다. 그러나 이것은 매우 드물게 유용합니다.

귀하의 경우 대답은 빠르고 간단하지 않습니다.

+0

추가 설명을 위해 질문을 수정했습니다. 도와 주시겠습니까? 감사. – user3848207

1

모듈을 가져올 때 모듈이로드되므로 거의 사용하지 않는 모듈을 가져와야하지만 초기화하는 데 많은 시간이 필요할 경우 필요할 때 가져와야합니다.

실제로 성능은 중요하지만 가독성을 고려하지 않으면 실제로 필요할 때 모듈을 가져 오는 것이 좋습니다.

하지만 우리는 프로그램을 유지 관리 할 필요가 있습니다. 맨 위에있는 모든 모듈을 가져 오는 것은 다른 사람들에게 말하고 자신이 사용하는 모듈을 작성하는 가장 명확한 방법입니다.

요약하면 비용이 많이 들지만 거의 사용되지 않는 모듈이 있다면 로컬로 가져와야합니다. 그렇지 않으면 맨 위에 가져와야합니다.

+0

성능에 대한 귀하의 의견이 오해의 소지가 있습니다. 가져 오기는 항상 함수 런타임에서 실행됩니다. 모듈 자체는 캐싱됨에 따라 다시로드되지 않지만 코드를 실행합니다. 유지 보수를위한 좋은 하나! – deets

+0

@deets "유지 보수"란 뜻을 오해하고있는 것 같습니까? 확실히 캐시를 사용하여 모듈을 다시 가져 오는 것을 알고 있지만 거대한 프로젝트에서 전체 파일에 사용 된 모든 모듈을 찾고 싶습니까? – Sraw

+0

나는 더 명확한 질문을 위해 약간의 편집을했다. 도와 주시겠습니까? 감사. – user3848207