1. 함수를 사용하는 이유
1. 다른 파일에 있는 함수도 갖고 올 수 있어 자주 쓸 기능을 함수로 만들어 계속 활용할 수 있다.
2. 여러줄의 작업을 함수로 묶으면 작업을 쉽게 반복할 수 있다.
3. 함수를 사용해서 함수 안에서 실행되는 코드를 숨길 수 있다.
== 사용자는 함수의 코드에 무엇이 쓰이는지 하나도 몰라도 함수를 쉽게 사용할 수 있다. (=함수의 기능을 추상화 한 것)
파이썬은 def키워드로 직접 함수를 정의할 수 있다.
def functionName():
함수 내용...
예시
def say_hello():
print("Hello!")
say_hello()
for i in range(5):
say_hello()
함수호출은 함수가 정의된 후에 나와야 한다.
(def로 함수를 정의한 다음에 함수를 사용해야한다는 뜻)
2. 지역변수와 전역변수
함수 안에 변수를 대입문으로 선언할 때, 파이썬은 그 변수가 지역변수라는 사실을 기억한다.
지역변수란 유효범위가 함수 안인 변수이다 --> 함수 안에서만 유효한 변수
# 지역/전역변수
def func1():
a = 3
func1()
# print(a) # error
b = 3
def func2():
a = 3
print(b)
함수안에 변수가 선언이 되지 않았는데 언급이 되면 파이썬이 전역변수 중에 찾는다
a = 10
def func3():
print(a)
func3()
지역변수와 전역변수에 같은 이름의 변수가 있는 경우
global예약어를 통해 전역변수를 사용할 수 있다.
a = 10
def func1():
a += 1 # error ## a변수가 정의 되어 있지 않아서 a = a+1연산을 수행하지 못함
print(a)
func1()
a = 10
def func1():
global a ## global예약어를 통해 전역변수 사용
a += 1
print(a - 5)
func1()
print(a)
3. 함수 호출 스택
파이썬은 함수 호출을 스택으로 관리한다.
스택은 Last in First out(LIFO)으로 관리하는 데이터 구조(데이터를 관리하는 객체)
스택은 코딩을 한다면 절대로 몰라서 안되는 기본 개념이니 꼭 숙지하고 있어야 한다.
스택 자료구조에 대한 설명: https://codio.tistory.com/entry/%EC%8A%A4%ED%83%9D-%ED%81%90Stack-and-Queue
다음의 그림을 보고 파이썬이 함수 데이터를 어떻게 관리하는지 알아보자.
위의 그림은 함수 f1, f2, f3이 정의되어 있고 f1을 실행한 모습이다.
호출스택이 있고 처음에 f1을 실행한다.
코드를 보면 f1함수가 끝나기 전에 f1함수 안에서 다른 함수 f2를 실행하는 것을 볼 수 있다.
그럼 호출 스택에 f2가 쌓인다.
f2도 마찬가지로 함수가 끝나기 전에 f3을 실행한다.
호출스택에 순서대로 f1, f2, f3이 쌓여있는 상황이다.
f3함수에는 출력하는 print()함수가 실행된다.
최종적으로 호출스택에 순서대로 f1, f2, f3, print함수가 쌓이게 된다.
가장 마지막에 있는 함수가 print()이므로 print()를 실행한다.
f3에서 print()를 실행하면 함수 f3이 종료되고 호출스택에서 제거된다.
이후에 다음 위에 있는 f2가 실행된다. f2에 있는 print()함수가 실행되고 f2함수가 종료되고 호출스택에서 제거된다.
똑같이 가장 위에 있는 f1함수가 실행되고 f1함수에 있는 print()함수가 실행된다.
f1함수도 종료되고 호출스택에서 제거되는 것으로 12번째줄의 코드 f1()이 완전히 종료된다.
이 개념을 처음 접하면 직접 손으로 써보는 것이 이해하기 쉽다.
가장 마지막에 들어온 함수부터 실행하고 그 함수가 다 끝나고야 이전에 실행했던 함수가 마저 실행되는 형태이다.
'💂군대 > KAIST ICT Academy' 카테고리의 다른 글
MO7 - 리스트와 튜플 (1) | 2024.09.12 |
---|---|
MO6 - 함수 매개변수와 반환값 (0) | 2024.09.04 |
MO4 - 조건문 (0) | 2024.08.07 |
MO3 - 반복문 (0) | 2024.08.03 |
MO2 - 자료형과 변수 (0) | 2024.07.30 |