전역변수에 대한 질문 (python)

조회수 257회
def print_sum():
    a = 100
    b = 200
    result = a + b
    print (' print_sum() 내부 : ' , a, ' 과' , b, ' 의 합은' , result , ' 입니다. ' )
a = 10
b = 20
print_sum()
result = a + b
print (' print_sum() 외부 : ' , a, ' 과' , b, ' 의 합은' , result , ' 입니다. ' )

여기서

def 안에 있는 변수가 100, 200을 참조하는 새로운 a, b 변수 생성

이라고 하고 def 밖에 있는 변수를

10, 20을 참조하는 a, b 변수 생성

라고 하더라구요.

제가 봤을 때는 일단 print_sum( )에서 변수를 먼저 생성한거고, 그 후에 밖에서 10 ,20이라는 a,b값이 할당된게 아닌가요? a=10, b=20을 할당하면 밑에 print_sum( )값이 변하는게 아닌가요? 한번 define하면 define된 변수 값은 안 변하고 변경시키려면 def 안에 변수 값을 변경시켜야만 변경 되는건가요? 알려주시면 감사하겠습니다! 좋은 하루 되세요!

3 답변

  • 좋아요

    0

    싫어요
    채택 취소하기
    1. 설명이 난잡합니다. 정보의 교류를 원한다면 모든 문장에 주어 + 동사 (+ 목적어)를 명확히 해주세요.

    2. 문장을 쓰기 어렵다면 저와 같이 번호를 사용하는 것도 좋습니다.

    3. 저는 파이썬에 대해 따로 교육받은 게 없습니다. 이 말을 왜 하냐하면, 전역변수, define, 지역변수와 같은 용어가 정확히 무엇을 뜻하는지 제가 모르고, 그렇기 때문에 이에 대한 명확한 설명이 불가능함을 알리기 위함입니다.

    해당 용어에 대한 명확한 설명이 제게는 불가능하고, 예제 코드를 보고 이건 이런 거겠구나, 하고 제가 이해한 내용을 바탕으로 작성된 겁니다.

    1. 첨부한 이미지의 코드는 다음과 같지 않을까 생각됩니다.
     # 스크립트 예시
     a = 10
     b = 20
    
     c = a + b
    
     # 지역변수 예시
     a = 10
     b = 20
     def print_sum():
         a = 100
         b = 200
         c = a + b # 300
    
    
    1. 지역변수의 경우 외부 변수를 간섭할 수 없는게 아니라, 함수(print_sum) 안에서 선언된 변수는 일반적으로 함수 밖에서 사용할 수 없다는 겁니다. 다음과 같이 외부 변수를 함수에서 사용하는 식의 사용도 가능합니다.
     a = 10
     b = 20
     def ex():
        a = 100
        c = a + b # 120
    
    
    1. 함수 밖에 존재하는 변수 a, b와 함수 안에서 선언된 a, b는 서로 다른 변수입니다.

    함수(print_sum)의 경우 다음과 같다고 볼 수 있습니다.

     a = 10
     b = 20
     def print_sum():
         c = 100
         d = 200
         print(c, d)
         del c
         del d
    
    1. 제 생각에는 이 예시들로 충분히 이해가 가능하다고 보는데, 내용 전달이 충분하지 않아 어떤 점을 모르겠다는지 모르겠습니다.
    • 이해 되었습니다 감사합니다! jeongwonbahk 2022.5.30 22:03
  • 함수 밖에서 선언된 걸 함수에서 가져다 쓸 수는 있어도, 함수 안에서 선언된게 함수 밖 변수에 영향을 주는건 본 적 없습니다.

    a = 20
    def aa():
        print(a)
    aa()
    print(a)
    >> 20
    20
    
    def aa():
        print(a)
    a = 20
    aa()
    print(a)
    >> 20
    Traceback (most recent call last):
        print(a)
    NameError: name 'a' is not defined
    
    a = 30
    def aa():
        a = 20
        print(a)
    aa()
    print(a)
    >> 20
    30
    
    • 댓글로는 이미지 추가가 안돼서 밑에 답변으로 부가 질문 여쭤보았습니다 혹시 답변 부탁드려도 될까요? jeongwonbahk 2022.5.28 22:17
  • 이미지

    a,b의 사용이 define 함수 안이랑 밖이 다른건가요? 위에 초보님께서 달아주신 답변을 보면 define안의 변수가 밖에는 영향을 미치지 못하고 ( 밖에선 변수를 선언한지도 모르고 ) , 제 원래 질문의 코드를 보면 마치 define 함수 안의 a,b와 밖의 a,b가 이름만 같지 다른 변수처럼 느껴집니다. 이미지 1을 보면 마지막 줄에 지역변수가 참조하는 객체가 아닌 별개의 객체를 참조한다는데 지역변수가 아니라 전역변수가 맞는 것 아닌가요? define 함수 밖의 객체를 참조하는게 아니라 안의 지역변수가 참조하는 객체를 쓰는거니까요

    혹시 틀린 점 있다면 수정 부탁드려도 될까요? 항상 덕분에 도움 많이 받고 있습니다 정말 감사합니다!

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)