Programming Language/Python

[Python] Abstraction - Return, Global/Local, Constant Variable

jiachoi 2023. 7. 3. 16:05

1. return

return?
1. 함수호출을 return을 따르는 값으로 대체
2. 함수 실행을 멈추고 호출이 끝나는 지점부터 진행

▶ retrun 첫번째 예제

def f(x):
	return x+1

def g(x):
	return x*x-1

print(f(2)) # = print(3)
print(g(3)) # = print(8)
print(f(2)+g(3)) # = print(3+8)
3
8
11

return문은 함수 호출을 return을 따르는 값으로 대체한다.

위의 7번째 줄을 보면, print(f(2))는 f(2)라는 함수를 호출하여 출력하라는 의미이다.

이를 위해 f(x)함수의 body부분인 2번째 줄로 가면 return(x+1) (= x+1)을 출력하라는 의미가 나와있으므로

7번째 줄은 print(2+1)로 대체되어 print(3)이 된다. g(x)함수도 같은 원리로 적용된다.

▶ retrun 두번째 예제

def f(x):
	print("f함수 시작부분")
	return x + 1
	print("f함수 끝부분") # DEAD CODE

def g(x):
	print("g함수 시작부분")
	return x*x - 1
	print("g함수 끝부분") # DEAD CODE

print(f(2))
print(g(2))
print(f(2)+g(2))
# f함수 시작부분
3
# g함수 시작부분
3
# f함수 시작부분
# g함수 시작부분
6

 

return문이 있을 경우 함수 실행을 멈추고, 호출이 끝나는 지점부터 진행한다.

이말인즉슨, return문이 실행되면 함수가 끝난다는 의미이다.

예제를 보면 1~10번까지는 함수를 정의하는 부분이고 11번은 함수를 호출하는 부분이므로 그부분부터 보면,

print(f(2))를 출력하기 위해 파이썬은 첫줄부터 검토를 시작한다.

1번 줄은 함수를 정의하는 부분이므로 넘어가고,

2번째줄은 print("f함수 시작부분")이라는 문장을 출력하라는 명령어이기때문에 "f함수 시작부분"을 출력하며,

3번째줄은 retrun x+1 이기 때문에 f(2)를 x+1(=2+1)로 대체하여 출력하라는 의미이므로 11번째 줄을

print(3)으로 변경한다.

return문이 실행되어 함수가 끝났기 때문에 4번째 줄은 실행될 일이 없다. 4번째 줄은 따라서 DEAD CODE(실행될 일이 없는 코드) 이다.

print(g(2))도 위와 마찬가지로 8번째 return부분이 있는 곳까지만 실행이 되며 9번쨰 줄은 DEAD CODE가 된다.

▶ retrun vs print 문

많은 사람들이 return과 print문을 헷갈려한다.아래 예시로 둘의 차이점을 알아보자.

(예시를 꼼꼼하게 읽어보세요!)

1. def print_square(x):
2.     print(x*x)
3. 
4. def get_square(x):
5.     return x*x
6.
7. print_square(3) # print_square 함수에 3을 입력하여 출력하라. => 9
8. get_square(3) # return문만 있고, 출력하라는 명령이 없기 때문에 출력이 되지 않는다. 
9. print()
10. print(get_square(3)) # print를 사용해서 return문을 출력하라는 명령이기때문에 print(3)이 된다.
11. print(print_square(3)) 
     # 일단 print문 안에 있는 print_square(3)은 값이 9가 되어 9가 출력된다.
     # 그러나 함수를 출력하려고 보니 값이 대체될만한 return이 정의되어있지 않다.
     # 파이썬 내부에서 return이 정의되어 있지 않으면 None으로 출력을 하게 하므로
     # return문이 없기 때문에 None을 출력한다.
9

9
9
None

함수는 무조건 return값을 가지고 있어야 한다. 가지고 있지 않다면 파이썬 자체에서 None으로 출력 한다.

또한 return 문은 print 하라는 명령이 없으면 출력되지 않는다.

- get_square(3) => 출력되지 않음

- print(get_square(3)) => get_square(3)의 값을 출력하라고 나와있으므로 9가 출력됨.

2. global, local 변수

▶ local 변수

: local 변수란, 함수 안에서 사용하는 변수가 일반적으로 함수 내부에서만 유효하기 때문에

함수 밖에서는 쓸 수 없는 변수를 뜻한다.

▶ global 변수

: global 변수란, 모든 부분에서 사용 가능한 변수를 뜻한다.

def x_is_one():
    x = 1

x_is_one()
print(x)

위의 코드를 실행하면 이러한 오류창이 뜬다.

이 오류창은 name 'x' is not defined 라는 이유로 오류가 떴다.

이 것은 x가 정의되어있지 않았다는 의미이다. 그 이유는 x는 local변수이기 때문에 x_is_one이라는 함수 안에서만 사용이 가능한 변수이므로 그 이외의 상황에서는 사용 할 수 없다.

함수 안에서 사용된 변수를 함수 밖에서도 사용하고 싶다면 함수 안에서 변수를 global변수로 지정해주면 된다.

def x_is_one():
    global x        # global 변수로 정의된 변수이므로 함수 밖에서도 사용이 가능하다.
    x = 1

x_is_one()
print(x)

위 예제의 결과값, global 변수로 지정 후 오류가 나지 않는다.

 

3. 상수(Constant)

상수란 바뀌지 않는 값을 뜻한다.

파이썬 커뮤니티에서는 상수를 사용할때 이름을 모두 대문자로 지정하기 하자는 규칙을 지정해놓았다. 파이썬에서 상수는 바뀌지 않는 값이지만 바꿀수는 있기 때문에 일반 변수와 큰 차이는 없다. 하지만 되도록이면 바꾸지 않는 것이 파이썬 사용을 더 효율적으로 할 수 있다.

상수 사용 예제