복붙노트

[PYTHON] 파이썬에서 "global"문을 사용합니까? [닫은]

PYTHON

파이썬에서 "global"문을 사용합니까? [닫은]

파이썬 글로벌 서술문 ( "파이썬 범위")에 대한 질문을 읽었을 때 파이썬 초보자 였을 때 (나는 글로벌하게 많이 사용함) 어떻게 요즘은 몇 년 후에이 문장을 얼마나 자주 사용했는지 기억하고있었습니다. 그것을 전혀 사용하지 마십시오. 나는 심지어 그것을 "비 - 파이썬 성"이라고 생각한다.

이 문장을 파이썬에서 사용합니까? 시간이 지남에 따라 귀하의 사용이 변경 되었습니까?

해결법

  1. ==============================

    1.나는 다음과 같은 맥락에서 '글로벌'을 사용한다 :

    나는 다음과 같은 맥락에서 '글로벌'을 사용한다 :

    _cached_result = None
    def myComputationallyExpensiveFunction():
        global _cached_result
        if _cached_result:
           return _cached_result
    
        # ... figure out result
    
        _cached_result = result
        return result
    

    나는 'global'을 사용하는데, 이것은 이해가되고, 무엇이 일어나고 있는지를 독자에게 분명히하기 때문이다. 나는 또한 동등한이 패턴이 있음을 알고 있지만,인지 적로드를 독자에게 더 많이 둡니다.

    def myComputationallyExpensiveFunction():
        if myComputationallyExpensiveFunction.cache:
            return myComputationallyExpensiveFunction.cache
    
        # ... figure out result
    
        myComputationallyExpensiveFunction.cache = result
        return result
    myComputationallyExpensiveFunction.cache = None
    
  2. ==============================

    2.필자는 Python을 전문적으로 사용한 3 년 이상, Python 애호가로서의 5 년 동안의 프로덕션 코드에서이 문장을 적법하게 사용하지 못했습니다. 변경해야하는 모든 상태는 클래스에 있거나 "전역"상태가있는 경우 글로벌 캐시와 같은 일부 공유 구조에 있습니다.

    필자는 Python을 전문적으로 사용한 3 년 이상, Python 애호가로서의 5 년 동안의 프로덕션 코드에서이 문장을 적법하게 사용하지 못했습니다. 변경해야하는 모든 상태는 클래스에 있거나 "전역"상태가있는 경우 글로벌 캐시와 같은 일부 공유 구조에 있습니다.

  3. ==============================

    3.나는 함수가 전역 적으로 사용될 변수를 생성하거나 설정하는 상황에서 그것을 사용했다. 여기 몇 가지 예가 있어요.

    나는 함수가 전역 적으로 사용될 변수를 생성하거나 설정하는 상황에서 그것을 사용했다. 여기 몇 가지 예가 있어요.

    discretes = 0
    def use_discretes():
        #this global statement is a message to the parser to refer 
        #to the globally defined identifier "discretes"
        global discretes
        if using_real_hardware():
            discretes = 1
    ...
    

    또는

    file1.py:
        def setup():
            global DISP1, DISP2, DISP3
            DISP1 = grab_handle('display_1')
            DISP2 = grab_handle('display_2')
            DISP3 = grab_handle('display_3')
            ...
    
    file2.py:
        import file1
    
        file1.setup()
        #file1.DISP1 DOES NOT EXIST until after setup() is called.
        file1.DISP1.resolution = 1024, 768
    
  4. ==============================

    4.제 생각에는 파이썬 코드에서 전역 변수를 사용할 필요가 있다고 느끼면 바로 잠시 멈추고 코드 리팩토링 작업을하는 것이 좋습니다. 글로벌에 코드를 삽입하고 리팩토링 프로세스를 지연하면 데드 라인이 가까워지면 유망한 것처럼 들릴지 모르겠지만 실제로는 코드가 작동하지 않는 한 다시 돌아 가지 않고 수정할 필요가 없습니다. 어떤 이상한 이유가 있습니다. 디버깅해야합니다. 전역 변수 중 일부가 발생합니다.

    제 생각에는 파이썬 코드에서 전역 변수를 사용할 필요가 있다고 느끼면 바로 잠시 멈추고 코드 리팩토링 작업을하는 것이 좋습니다. 글로벌에 코드를 삽입하고 리팩토링 프로세스를 지연하면 데드 라인이 가까워지면 유망한 것처럼 들릴지 모르겠지만 실제로는 코드가 작동하지 않는 한 다시 돌아 가지 않고 수정할 필요가 없습니다. 어떤 이상한 이유가 있습니다. 디버깅해야합니다. 전역 변수 중 일부가 발생합니다.

    그래서, 솔직히 말해서, 허용 되더라도, 나는 그것을 사용하는 것을 피할 수있는만큼 많이 할 것입니다. 코드가 단순한 클래스를 의미한다고해도 말입니다.

  5. ==============================

    5.객체는 비 로컬 상태를 갖는 것이 선호되므로 전역이 거의 필요하지 않습니다. 다가오는 nonlocal 수정 자도 널리 쓰일 것이라고 나는 생각하지 않는다. 나는 대부분 거기에 lispers가 불평을 멈추게한다고 생각한다 :-)

    객체는 비 로컬 상태를 갖는 것이 선호되므로 전역이 거의 필요하지 않습니다. 다가오는 nonlocal 수정 자도 널리 쓰일 것이라고 나는 생각하지 않는다. 나는 대부분 거기에 lispers가 불평을 멈추게한다고 생각한다 :-)

  6. ==============================

    6.명령 줄 스크립트와 'optparse'를 사용하여 전역 옵션에 사용합니다.

    명령 줄 스크립트와 'optparse'를 사용하여 전역 옵션에 사용합니다.

    내 main ()은 인수를 구문 분석하고 스크립트의 작업을 수행하는 모든 함수에 전달하지만 제공된 옵션을 전역 'opts'사전에 씁니다.

    쉘 스크립트 옵션은 종종 '잎'동작을 조정하며, 모든 인수 목록을 통해 'opts'사전을 스레드하는 것은 불편하고 불필요합니다.

  7. ==============================

    7.나는 그것을 피하고 우리는 생산 코드에서 그것을 금지하는 필림 트 규칙을 가지고있다. 나는 실제로 그것이 존재하지 않아야한다고 믿는다.

    나는 그것을 피하고 우리는 생산 코드에서 그것을 금지하는 필림 트 규칙을 가지고있다. 나는 실제로 그것이 존재하지 않아야한다고 믿는다.

  8. ==============================

    8.드물게. 나는 그것을 전혀 사용하지 않았다.

    드물게. 나는 그것을 전혀 사용하지 않았다.

  9. ==============================

    9.상태 공유를위한 스레드에서 유용 할 수 있습니다 (주위에 잠금 메커니즘이 있음).

    상태 공유를위한 스레드에서 유용 할 수 있습니다 (주위에 잠금 메커니즘이 있음).

    그러나 나는 거의 사용하지 않는다.

  10. ==============================

    10.나는 일회성 작업을 자동화하기 위해 빠르고 일회용 스크립트에이 스크립트를 사용했다. 그보다 더 큰 것, 또는 재사용해야하는 것, 그리고 나는 더 우아한 방법을 찾을 것입니다.

    나는 일회성 작업을 자동화하기 위해 빠르고 일회용 스크립트에이 스크립트를 사용했다. 그보다 더 큰 것, 또는 재사용해야하는 것, 그리고 나는 더 우아한 방법을 찾을 것입니다.

  11. ==============================

    11.한번 아니면 두번. 그러나 리팩터링을 시작하는 것이 항상 좋은 출발점이었습니다.

    한번 아니면 두번. 그러나 리팩터링을 시작하는 것이 항상 좋은 출발점이었습니다.

  12. ==============================

    12.내가 그것을 피할 수 있다면, 안돼. 그리고 내 지식으로는 항상 그것을 피할 수있는 방법이 있습니다. 하지만 전적으로 쓸모가 없다는 것은 아닙니다.

    내가 그것을 피할 수 있다면, 안돼. 그리고 내 지식으로는 항상 그것을 피할 수있는 방법이 있습니다. 하지만 전적으로 쓸모가 없다는 것은 아닙니다.

  13. from https://stackoverflow.com/questions/146557/do-you-use-the-global-statement-in-python by cc-by-sa and MIT license