점프투 파이썬 함수 밖과안의 변수 개념 질문있습니다

그렇다면 vartest라는 함수를 사용해서 함수 밖의 변수 a를 1만큼 증가시킬 수 있는 방법은 없을까? 이 질문에는 2가지 해결 방법이 있다.

  1. return 사용하기

vartest_return.py

a = 1
def vartest(a):
a = a +1
return a

a = vartest(a)
print(a)
첫 번째 방법은 return을 사용하는 방법이다. vartest 함수는 입력으로 들어온 값에 1을 더한값을 돌려준다. 따라서 a = vartest(a)라고 대입하면 a가 vartest 함수의 결괏값으로 바뀐다. 여기에서도 물론 vartest 함수 안의 a 매개변수는 함수 밖의 a와는 다른 것이다.

이 예제에서 함수 밖,안의 변수개념이 이해가 안됩니다

제가 이해한게 맞는지가 궁금합니다
그리고 맨처음 a = 1의 a가 함수밖의 변수인지 안의 변수인지도 궁금합니다 print(a) 하면 2 가 나오는데
밖의 변수라면 어떻게 함수 안에 있는 a에 대입을 할수있는지

안의 변수라면 바로 앞의 에제에서 a=1을 설정하지 않아서

vartest_error.py

def vartest(a):
a = a + 1

vartest(3)
print(a)

print(a)값의 오류가 생긴걸 어떻게 설명할수있는지 궁금합니다

얌미 764

2020년 7월 16일 10:57 오전

목록으로
2개의 답변이 있습니다. 1 / 1 Page

얌미님,

이 부분을 설명하기 위한 내용이 책에 있는데 많이 부족했나 보네요.
def 함수에서 사용된 변수명은 def 밖의 변수명과 아무런 상관이 없습니다.

즉, 변수명을 동일하게 a로 사용한다고 해도 전혀 다른 변수입니다.

따라서 다음처럼

def vartest(a):
    a = a + 1

vartest(3)
print(a)

vartest에서 사용된 a 변수는 def 함수에서만 사용됩니다.
이 때 print(a) 처럼 함수 밖에서 a를 참조하려고 하면 어떤 결과가 생길까요?

a라는 변수를 찾을수 없다는 오류가 발생하게 될 것입니다.

설명하다보니 책의 내용과 별 다를게 없을것 같네요. ㅜㅜ
아무튼 도움이 되셨기를 바랍니다.

박응용

M 2020년 7월 16일 1:40 오후

  1. 함수의 안과 밖이 무엇인지 (범위)
  2. a의 플로우 (범위와 변수명간의 관계)
    이부분이 궁금하신건가요?

저도 초보입니다만 간단한부분인데 이해를 돕기위해 조금 길게 써봤습니다 ㅋㅋ

1번 답변 드리겠습니다.

`a =1   `

def vartest(a): ← 함수명/함수선언 
 a = a + 1 ← 시작
 return a ← 반환
← 함수 끝 왜냐? 공백(탭)이 없기 때문.

a =vartest(3)
print(a)

만약 다른 언어라면 이런식으로 표현합니다.( 파이썬에 "{","}"만 추가한겁니다 이런 언어는 실제로 없습니다. 이해를 돕기위함임 )
이렇게 보시니 안과 밖이라는 개념이 좀 이해가 되시나요?

def vartest(a) ← 함수명/함수선언
{ ← 시작
 a = a + 1
 return a ← 반환
}← 끝

a =vartest(3)
print(a)

*추가설명드리자면 return 시 함수는 종료됩니다. 일반적으로 reutrn이 있다면 그부분이 끝이라고 보시면됩니다.
다만 반환하지 않는 경우도 있습니다. 따라서 return 은 무조건 함수 탈출이라고 생각하시면안됩니다.

def vartest(a) ← 함수명/함수선언
 a = a + 1
 print(a)

vartest(3)
print('ok')

결과 >

4
ok

2번 답변 . a 가 함수 위에도 있고 아래에도 있고 안에도 있고헷갈리시는것같습니다.
말씀하신 아래 구문

a =1   

def vartest(a):
 a = a + 1
 return a

a =vartest(3)
print(a)

위 구문은 모두 아래와 같은 기능과 역할입니다.

변형1.

def vartest(a):
 a = a + 1
 return a

a =1   
a =vartest(3)
print(a)

변형2. 이렇게 쓰는 조금 이해가 가시나요?

a =1   
a =vartest(3)
print(a)


def vartest(a):
 a = a + 1
 return a

변형3. 함수의 변수명을 바꿔볼께요 vartest매개변수명만 바뀌엇지 기능과 역할 표현은 모두 동일합니다.

a =1  
a= vartest(3)
print(a)


def vartest(ab):
 ab = ab + 1
 return ab

변형3에서 a→ 밖의 a, ab → 안의 a입니다. 다만 변수명을 같게했을뿐이죠

tklee.me

M 2020년 7월 17일 6:26 오후

감사합니다! 이해하는데 많은 도움이 되었어요 - 얌미님, 2020년 7월 23일 1:31 오후 추천 , 대댓글