코딩 스쿨에 오신것을 환영합니다~~

질의응답 게시판

 
[스타트 파이썬] 예제 7-7 질문입니다.
한 * 솔 | 2019-01-30
▷ 첨부파일 : prime.py (428 Byte)      [저장]

안녕하세요 7장 함수부분 공부하다가 의문점이 생겨 질문드립니다.
예제 7-7에 2에서 n까지의 정수 중 소수를 구하는 프로그램을 보면,

def isPrimeNumber(num) :
      prime_yes = True 
      for i in range(2, a) : 
            if a % i == 0 : 
                  prime_yes = False 
                  break
      return prime_yes

n = int(input('n 값을 입력해 주세요 : '))

print('2 ~ %d까지의 정수 중 소수 :' % n, end = ' ')
for a in range(2, n+1) :
      is_prime = isPrimeNumber(a)
      if is_prime :
            print(a, end=' ')


위의 isPrimeNumber함수를 정의할때 매개변수를 num으로 설정하였는데, 아래 문장에는 num이 없고 매개변수 a만 존재합니다.
하지만 함수를 호출했을때 값이 제대로 나오는 이유를 모르겠습니다.
또한 함수 정의에 괄호 안 매개변수를 num이 아닌 아무 단어를 넣어도 값이 나오는데 왜 그런건가요?

  • 관 * 자
  • 2019-01-30 (11:50)
안녕하세요.
제가 실수했습니다. 말씀하신대로로  isPrimeNumber함수에서는 a 대신 num을 사용하는 것이 맞습니다.

아래에 수정된 부분을 참고해 주세요.

참고로 결과가 제대로 나오는 것은 함수 호출 시 사용한 변수 a는 정의된 함수에서 이 변수 a의 값을 사용가능합니다.

그러나, 이것은 좋은 방법이 아닙니다. 일반적으로 함수 호출하는 부분(메인 부분)에서 사용되는 변수를 전달하고 정의된 함수에서는 매개변수로 받아서 정의된 함수 내에서만 사용합니다.
이렇게 하는 이유는 하나의 변수를 공유해서 사용하게 되면 혹시 실수로 정의된 함수에서 해당 변수 값을 변경하면 호출부 함수의 변수의 값이 어떻게 될지 무척 헷갈리지 됩니다.

기본적으로 함수를 사용 시 변수는 매개변수로 주고 받는다고 생각하시면 됩니다.

하나의 변수를 모든 함수에서 사용하고자 하면 'global 변수명'과 같이 미리 변수를 global로 선언하면 파일 내 모든 함수에서 그 값을 읽고 쓸 수 있습니다.
이러한 변수를 전역변수(global variable)라고 합니다. 전역변수는 너무 많이 사용하지 말고 꼭 필요한 경우에만 사용하는 것이 좋습니다. 

더 궁금한 점 있으시면 댓글에 달아주세요.^^

def isPrimeNumber(num) :
      prime_yes = True 
      for i in range(2, num) : 
            if num % i == 0 : 
                  prime_yes = False 
                  break
      return prime_yes
      
n = int(input('n값을 입력해 주세요 : '))

print('2 ~ %d까지의 정수 중 소수 :' % n, end = ' ')      
for a in range(2, n+1) :
      is_prime = isPrimeNumber(a)
      if is_prime :
            print(a, end=' ')