ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [파이썬] 전역변수, 지역변수와 global 키워드 - 장단점
    코딩/Python 2023. 4. 12. 14:31
    728x90

    파이썬은 변수형을 미리 지정하지 않아도 변수값을 입력하는 순간 변수형을 스스로 지정한다.

    전역변수는 def로 지정된 구역 바깥에서 정의된 변수이거나, global 키워드로 지정된 변수다.

    전역변수를 함수에서 사용하려면 아래의 예를 참고하면 된다.

    전역변수를 수정하려고 할 경우에는 함수에게 인수로 전달하고, return으로 반환해야 한다.

    # 예제 1
    a=1 # 전역변수 지정
    def ax(a): # 전역변수를 받는다
        print(a) # 전역변수 출력
        a=2 # 지역변수 지정
        return a # 지역변수 반환
    
    a=ax(a) # 지역변수를 전역변수로 전달
    print(a) # 전역변수 출력

    전역변수를 수정하지 않고 사용만 할 경우는 함수의 인수로 전달받을 필요가 없다.

    아래 코드는 잘 작동한다.

    # 예제 2
    b=1 # 전역변수
    def bx(): # 전역변수
        print(b) # 전역변수

    하지만, 전역변수를 인수로 받지 않고 수정을 하려고 하면 UnboundLocalError가 발생한다.

    # 예제 3
    b=1 # 전역변수
    def bx(): # 전역변수
        print(b) # 전역변수
        b = 2 # 에러 발생

    전역변수를 인수로 지정하지 않고 값을 수정할 경우에는 `global` 키워드로 함수 내에서 변수를 별도로 지정해야 한다.

    당연한 소리지만, 이 경우에는 별도의 반환절차 없이 변수값의 변경, 사용이 가능하고 예제 1과 동일한 기능을 한다.

    # 예제 4
    b=1 # 전역변수
    def bx(): # 전역변수
        global b # 전역변수 지정
        print(b)
        b = 2
        print(b)
    
    bx()
    print(b) # bx()에서 변수 반환 없이 사용

    아래는 전역변수를 인수로 전달받아 수정, 반환하는 방식과 global 키워드를 사용하는 방식에 대한 차이를 ChatGPT가 설명한 것이다.

     

    ChatGPT의 설명

    변수를 인수로 전달받고 수정해서 반환하는 방법과 global 키워드를 사용하는 방법은 각각 장단점이 있습니다.

     

    변수를 인수로 전달받고 수정해서 반환하는 방법은 함수가 전역 변수를 직접 수정하지 않기 때문에 함수 호출 시의 부작용이 적습니다. 또한 함수 호출 시에 수정할 값을 인수로 전달하므로, 함수 호출 시 원하는 값을 쉽게 지정할 수 있습니다. 하지만 인수로 전달하는 방식은 함수 호출 시 매번 변수를 복사하는 작업이 필요하므로, 변수의 크기가 크거나 함수 호출이 빈번하게 일어나는 경우 성능이 저하될 수 있습니다.

     

    반면 global 키워드를 사용하는 방법은 함수 내에서 전역 변수를 직접 수정할 수 있으므로, 함수 호출 시의 부작용이 크지만, 함수 호출 시 인수를 전달하는 것보다 간단하고 성능이 더 우수합니다. 하지만 global 키워드를 사용하면 함수 내에서 전역 변수를 수정하므로, 코드의 복잡성이 높아질 수 있습니다.

     

    따라서 변수를 인수로 전달받고 수정해서 반환하는 방법과 global 키워드를 사용하는 방법은 사용하는 상황에 따라 다르며, 각각의 장단점을 고려하여 적절한 방법을 선택해야 합니다.

    728x90

    댓글

Designed by Tistory.