2021년 5월 20일 목요일

[파이썬] 로컬 변수들의 상태 등을 보여주는 locals() 함수

 

특정 함수내에서 사용되는 로컬 변수들의 변수 이름 및 현재 값 등을 알고 싶을 때 사용하는 함수가 바로 locals()라는 파이썬 빌트인 함수가 있습니다.

 

아래 소스를 보시면 바로 이해가 빠를 것입니다.

 

def test():

    a = 1

    b = 1

    print (locals())

 

test()

 

여기서 test라는 함수에서 ab라는 로컬 변수가 있는데, locals() 함수를 사용하면 이들 변수들의 현재 값을 알수 있습니다.

 

아래가 실행한 결과입니다.

 

{'a': 1, 'b': 1}

 

locals() 함수는 로컬 변수 이름과 현재 값들을 dict 데이터형으로 돌려줍니다.

 

아래의 코드와 같이 dict형 데이터 변수의 값을 변경할 수 있지 않을까 해서 한번 시도를 해보았습니다.

 

def test():

    a = 1

    b = 1

    print (locals())

 

    locals()['a'] = 3

    locals()['b'] = 4

    print (locals())

 

test()

 

그러나 아래와 같이 locals()로는 로컬 변수의 값을 변경할 수 없습니다.

 

{'a': 1, 'b': 1}   # 첫번째 locals()에서 출력한 값

{'a': 1, 'b': 1}   # 두번째 locals()에서 출력한 값

 

그러면 아래 코드는 어떨까요? dict형에서 새로운 로컬 변수 항목을 추가하여 실행시키는 코드입니다.

 

def test():

    a = 1

    b = 1

    print (locals())

 

    locals()['c'] = a + b

    print (locals())

 

test()

 

아래와 같이 새로 추가된 변수의 값은 locals() 함수를 사용하여 변경가능합니다.

 

{'a': 1, 'b': 1}   # 첫번째 locals()에서 출력한 값

{'a': 1, 'b': 1, 'c': 2}   # 두번째 locals()에서 출력한 값

 

또 하나의 코드를 보면, 로컬 변수를 locals() 함수로 추가하여 값을 계산한 다음, 다시 다른 값으로 변경하는 코드입니다.

 

def test():

    a = 1

    b = 1

    print (locals())

 

    locals()['c'] = a + b

    print (locals())

 

    locals()['c'] = 10

    print (locals())

 

test()

 

위의 코드의 ‘c’라는 새로 추가한 로컬 변수는 언제든제 값이 변경가능하고 기존에 있던 ‘a’‘b’ 변수의 값을 변경할 수가 없습니다.

 

{'a': 1, 'b': 1}   # 첫번째 locals()에서 출력한 값

{'a': 1, 'b': 1, 'c': 2}   # 두번째 locals()에서 출력한 값

{'a': 1, 'b': 1, 'c': 10}   # 세번째 locals()에서 출력한 값

 

댓글 없음:

댓글 쓰기