파이썬 코칭스터디 1기 - 모두를 위한 파이썬(PY4E) 4강 (함수)

태온·2021년 7월 29일
0
post-thumbnail

4. 함수

파이썬에는 두 종류의 함수가 존재한다.

첫 번째는 내장함수(print(), input(), type() 등)이고, 두 번째는 우리가 정의하고 사용하는 함수이다.

함수는 반복적으로 호출해야 하는 코드의 묶음을 하나의 블럭으로 만들어 이름을 붙여 재사용률을 높인 "코드의 묶음"이다. 우리가 함수를 정의 할 때는 def 예약어를 사용하며 함수 이름, 괄호 그리고 인자를 이용해 함수를 호출한다.

우리가 함수를 정의하는 이유는 반복적으로 사용해야할 때 코드가 너무 길어지므로 재사용률을 높인 코드의 묶음 즉, def 함수를 사용한다.

예를 들어, 이를 닦는다를 5살짜리 아이에게 가르친다고 생각해보자. 그리고 안타깝게도 아이는 각 단계를 매일 하나하나 알려줘야 한다고 가정하자.

치약과 칫솔을 꺼낸다 → 치약을 칫솔에 1cm가량 바른다 → 물을 묻힌다 → 윗니를 닦는다 → 아랫니를 닦는다 → 물로 행군다.

만약, 위와 같은 과정을 매일 반복해서 알려줘야 한다면, 귀찮아진다.

이것을 하나의 함수로 정의를 한다면 아래와 같이 될 것이며, 양치질()이라는 함수의 이름만 호출해주게 되면 : (콜론) 이후에 입력해 놓은실행 코드를 순차적으로 실행이 가능하다.

def 양치질():
    치약과 칫솔을 꺼낸다.
    치약을 칫솔에 1cm가량 바른다.
    물을 묻힌다. 
    윗니를 닦는다.
    아랫니를 닦는다.
    물로 행군다.

1. 내장 함수 🤔

먼저, 내장함수에 대해 알아보자. 파이썬에는 이미 정의된 함수들이 매우 많다. float(), int()와 마찬가지로 최대값 함수 max(), 최소값 함수 min(), 제곱 값 pow() 등 많은 함수들이 있지만, max() 함수로 예를 들어보자.

big = max('Hello world') # Hello world 중에 가장 큰 문자 찾는 max()를 사용 => big 변수에 저장
print(big) # big 출력 

# 결과
w

파이썬에 내장 되어있는 함수 중 max() 함수가 있는데 이 함수를 사용하면 말 그대로 가장 큰 숫자 또는 문자를 찾는다. 여기서는 Hello world라는 인자에 max() 함수를 사용하였다. 사용자가 Hello world라는 문자열을 max()함수로 보내주면 max()함수는 이 문자열 중에 가장 큰 문자인 w를 반환해준다.

max()함수 안에는 이미 개발자들이 짜놓은 코드가 내장되어있다. 원래는 우리가 max() 함수와 같은 기능을 직접 코드로 짜야하지만 내장되어있는 함수가 있기에 우리는 편하게 쓰면 된다.


2. 직접 정의한 함수 - def 🤔

  • def 키워드, 괄호, 그리고 선택적으로 매개변수를 적어서 새로운 함수를 정의
  • 함수 본문은 들여쓰기
  • 호출을 하지 않는 이상 컴퓨터는 함수의 본문을 실행하지 않음

앞서 살펴본 것처럼 함수를 저장하기 위해서 def 라는 예약어를 사용한다. 만약 자신이 정의한 함수를 사용하고 싶다면 자신이 정의한 이름으로 저장된 함수를 직접 호출해야합니다.

def greeting():  # 함수 정의
	print("Hello World")

greeting() # 자신이 정의한 함수 이름으로 호출

# 결과
Hello World

- 인자(Argument)

  • 인자란 함수를 호출할 때 전달하는 값이다.

넘겨 받는 수 또는 값 이라고 생각하면 쉽게 이해 가능하며 위에서 print()안에 있는 Hello World도 인자이다.

- 매개 변수(Parameters)

  • 매개 변수는 함수가 정의된 곳에서 변수처럼 사용하는 것이다.
  • 특정 함수 호출에서 함수 안의 코드가 인자에 접근하기 위한 "손잡이" 역할을 함.
def greet(lang): # lang이라는 매개 변수를 사용하여 greet 정의 함수 지정
	if lang == 'es':
		print('Hola')
	elif lang == 'fr':
		print('Bonjour')
	else:
		print('Hello')

greet('en')  # Hello 출력
greet('es')  # Hola 출력
greet('fr')  # Bonjour 출력

파이썬은 def가 greet의 개념만 알고 직접 실행시키지 않는다. 우리가 greet() 로 호출을 해줄 때

파이썬은 greet('en')을 보고 우리가 정의한 함수 def greet() 함수로 갑니다. 여기서 우리는 greet('en')이라고 lang이 'en'이라는 인자를 찾기에 파이썬은 Hello라는 것을 찾아 반환해준다.

- 반환 값(Return Value)

종종 함수는 함수가 정의 된 곳에서 전달받은 매개변수를 이용해 프로그래머가 의도한 코드를 실행 한 뒤, 계산 결과인 값을 반환 할수 있다. return 사용

def greet():
    return "Hello"

print(greet(), "Glenn")
print(greet(), "Sally")

# 결과
Hello Glenn
Hello Sally

- Multiple 매개변수 / 인자

  • 함수 정의에서 한 개 이상의 매개변수를 정의 가능
  • 단순히 함수를 호출 할 때 인자를 추가
  • 숫자는 인자의 순서에 따라 매개변수와 매칭
def addtwo(a, b): # 매개변수 a, b 사용
	added = a + b  # a + b를 added 변수에 저장
	return added  # added를 반환

x = addtwo(3, 5)  # 직접 정의한 함수 addtwo 실행 => 3 + 5 = 8
print(x) # 8 출력

# 결과
8

🧐 함수를 써야하나? 말아야 하나?

  • 문장을 그룹으로 만들어 새로운 함수로 명명하는 것이 프로그램을 읽고,
    이해하고, 디버그하기 좋게한다.

  • 함수는 반복 코드를 제거해서 프로그램을 작고 꼼꼼하게 만든다. 나중
    에 프로그램에 수정사항이 생기면, 단지 한 곳에서만 수정을 하면 된다

  • 긴 프로그램을 함수로 나누어 작성하는 것은 작은 부분에서 버그를 수정
    할 수 있게 하고, 이를 조합해서 전체적으로 동작하는 프로그램을 만들 수
    있다.

  • 잘 설계된 함수는 종종 많은 프로그램에서 유용하게 사용된다. 잘 설계
    된 프로그램을 작성하고 디버그를 해서 오류가 없이 만들게 되면, 나중에
    재사용도 용이하다.

함수를 적게 사용하는 것에 걱정하지 말자. 이미 많은 내장 함수도 있고 반복해서 적는 것이 지칠 때가 온다면 그때가 함수를 써야할 때이다. 함수를 꼭 써야하는 것은 아니다. 남발 하지말자.

📗 참고

모두를 위한 파이썬 (PY4E)

profile
코딩도시락(배워서 남 주자)

0개의 댓글