813696842064654
양찬홍
  • 2016.6.17 19:42
  • 조회수 168
  • 답변수 1
813696842064654
양찬홍
  • 2016.6.17 19:42
  • 조회수 168
  • 답변수 1

변수의 생성과 생존 범위가 궁금합니다.

c언어나 java와 달리 a, b, c를 함수 밖에서든 안에서든 생성을 안하고 r1, r2식을 만들 때함수 안에서 바로 a, b, c를 쓰는 것만으로도 생성이 되는 것 같아 보이는데 맞아요? r1, r2도 바로 썻네요.

파이썬도 클래스가 있는 것으로 알고 있는데 같은 클래스라면 함수안에서 변수를 생성한 것이 함수를 나가서도 따로 선언하지 않고 바로 쓸 수 있을까요?

반대로 함수 밖에서 선언한 것이 함수안에서도 쓸 수 있을까요?
쓸 수 있다면 매개변수나 함수 안에서 생성한 변수와 이름이 겹쳤을 경우 어떻게 되는 지도 궁금합니다.

질문이 많은 것 같습니다ㅜㅜ 이 내용이 다음 강의 중에 나온다면 다음 강의를 확인하라고만 해주셔도 감사하겠습니다!

  • #파이썬 입문
  • #함수 만들기

1 답변

  • Spgjnhnsidwygch8ddkd
    Chandler
    • 2016.6.20 16:31

    1. 변수 생성

    우선 변수 생성에 관해서 답변드리자면, 파이썬에서의 변수가 생성되는 시점은 해당 변수에 어떠한 값이 할당 되었을 때 입니다.
    a = 1 문장이 있으면 이 문장이 실행된 순간 1 이 할당된 변수 a 가 생성 됩니다.
    같은 의미로 r1 = (-b + (b ** 2 - 4 * a * c) ** 0.5) / (2 * a) 이 문장이 실행된 순간 변수 r1 이 생성 되는 것 입니다.

    2. 변수 범위

    파이썬에서의 범수 범위는 c언어나 java와 다른 점이 있습니다.

    변수를 찾을 때 우선 함수 내부를 찾고 그 이후 함수 외부를 찾습니다.
    다르게 말하자면 지역(Local) 변수를 확인한 후 전역(Global) 변수를 확인한다는 것입니다.

    예를들어

    def print_add():
        a = 10
        r = a + b
        print('결과는 {}'.format(r))
    
    a = 1
    b = 2
    print_add()
    

    이 경우 r = a + b 에서 aa = 10 코드가 지역변수 범위에 있기때문에 함수 외부의 a = 1a 가 아닌, 함수 내부의 a = 10a 를 가리킵니다.
    b 는 함수 내부(Local)에 b 가 선언 되어있지 않아서 전역변수(Global)인 b = 2 를 가리킵니다.
    만약 코드에 b = 2 가 존재하지 않는다면 변수 b 에 할당된 값이 없기 때문에 에러가 발생합니다.

    함수 외부에 선언된 변수는 함수 내부에서 사용 가능하지만, 그 반대는 불가능 합니다.

    def print_add():
        a = 10
        r = a + b
        print('결과는 {}'.format(r))
    
    b = 2
    print(a) '''에러 발생'''
    

    함수 내부의 r = a + ba 는 함수 내부의 10을 가리키지만, 함수 외부의 print(a) 는 함수 내부의 a = 10 을 가리킬 수 없기때문에 에러가 발생합니다.

    매개변수와 함수 안에서 생성한 변수 이름이 중복된 경우

    def print_add(a):
        a = 10
        r = a + b
        print('결과는 {}'.format(r))
    
    a = 1
    b = 2
    print_add(a)
    

    이 경우 함수내부의 변수 a 는 새로 변수를 생성한 것이 아니라 매개변수 a 의 값을 1에서 10으로 바꾸는 의미가 됩니다.
    c언어와 java처럼 int a = 1; 과 같이 선언 방법이 따로 없기 때문에, 코드가 변수를 생성하는 의미인지, 생성된 변수에 값을 바꾸는 의미인지 잘 파악해야 합니다.

    원하는 답변이 됐는지 모르겠네요. 궁금한 점이 있다면 댓글 달아주세요.
    클래스 관련해서는 아래 클래스 강의를 수강해주세요!

답변 쓰기

이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.