아이고... 예비군이니 뭐니 바쁘기도 하거니와 좀 쉬고 왔습니다. 다시 달려보죠!
03-12 함수의 이해와 활용
코드를 여러 케이스에 대해 반복적으로 적용해야 할 경우, 스크립트가 길어지기 마련입니다. 이를 위해서 함수, 그리고 다음 포스트에서 언급할 클래스를 적극적으로 활용하면 소스코드를 기능별로 분리할 수 있습니다. 이러면 코드의 가독성을 높일 수 있고 유지/정비가 용이해진다는 장점도 있습니다.
함수의 정의
함수는 영단어 define에서 따온 def
구문을 이용해 정의할 수 있습니다. 해당 구문 뒤에 함수의 이름, 함수에 들어갈 입력값 (그리고 반환하는 값이 있어야 할 경우 return
문) 등의 요소로 구성됩니다. 여기서 함수에 들어가는 입력값을 인수라고 합니다. 예를 들어, 숫자 3개를 입력받아 결과를 반환하는 add
라는 함수를 정의해보겠습니다. 인수는 a, b, c의 세 개의 수이며, add
함수 내에서 a + b + c
를 계산한 뒤, 그 결과값 result
를 반환합니다.
def add(a, b, c):
result = a + b + c
return result
이렇게 함수를 한 번 정의하면 함수 내에 정의된 구문을 여러 번 스크립트에 적용해야 할 때, 그 구문을 여러번 Ctrl+C Ctrl+V 복붙할 필요 없이 합수만 호출하면 됩니다. 스크립트를 일일이 쓰고 있는 뻘짓 내지는 삽질 수고를 덜 수 있어 아래 구문과 같이 코드가 간결해집니다.
print(add(3, 5, 7))
print(add(5, 5, 2))
print(add(100, 200, 300))
이 예시에서는 간단한 덧셈이라서 복붙을 해도 그렇게까지 스크립트가 길어지지는 않습니다. 그러나 한 번 처리해야 하는 스크립트가 10줄, 20줄, ..., 그 이상으로 많아지면 함수를 정의한 후 호출하는 것이 훨씬 효율적입니다.
함수 예시 1 - 리스트를 인수로 받는 함수
어떤 함수의 인수는 다양한 자료형을 띌 수 있습니다. 위 예제에서는 정수형 변수 세 개를 인수로 삼았지만, 아래 예제에서는 임의의 길이를 갖는 리스트를 입력으로 받는 함수를 정의해보겠습니다. 리스트 내 원소 중 가장 큰 값의 인덱스를 반환하는 함수입니다.
def find_max_index(arr):
max_index = 0
for i in range(len(arr)):
if arr[max_index] < arr[i]:
max_index = i
return max_index
data = [7, 1, 5, 9, 3, 2, 4]
max_index = find_max_index(data)
print(max_index)
함수 예시 2 - 여러 자료형을 인수로 받는 함수
특정한 값을 가지는 원소의 인덱스를 찾는 함수를 작성해보겠습니다. 인수 arr
는 리스트 자료형이며, value
는 정수형 자료형으로 설정했습니다. value
에 해당하는 원소가 있다면 그 원소의 인덱스를 반환하지만, 원소가 없을 경우에는 -1을 반환하도록 해보겠습니다.
def find_certain_value(arr, value):
for i, x in enumerate(arr):
if x == value:
return i
return -1 # 해당 value를 찾지 못한 경우 -1을 반환합니다
print(find_certain_value([3, 5, 7, 9], 2))
print(find_certain_value([3, 5, 7, 9], 7))
함수 예시 3 - 소수(prime number)
마지막 예시로 하나의 자연수가 주어졌을 떄, 소수인지 아닌지 판별하는 함수를 작성해보겠습니다.
def is_prime_number(x):
if x <= 1:
return False
for divisor in range(2, x):
if x % divisor == 0:
return False
return True
print(is_prime_number(1))
print(is_prime_number(2))
print(is_prime_number(5))
print(is_prime_number(7))
print(is_prime_number(9))
print(is_prime_number(12))
print(is_prime_number(17))
* 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
'[패스트캠퍼스 환급챌린지]딥러닝 > Chapter 3. 파이썬' 카테고리의 다른 글
[패스트캠퍼스]Chapter 3. 딥러닝을 위한 파이썬 03-14 예외 처리 (0) | 2023.05.04 |
---|---|
[패스트캠퍼스]Chapter 3. 딥러닝을 위한 파이썬 03-13 클래스의 이해와 활용 (0) | 2023.05.03 |
[패스트캠퍼스]Chapter 3. 딥러닝을 위한 파이썬 03-11 파일 입출력 (0) | 2023.04.17 |
[패스트캠퍼스]Chapter 3. 딥러닝을 위한 파이썬 03-10 반복문 (0) | 2023.04.14 |
[패스트캠퍼스]Chapter 3. 딥러닝을 위한 파이썬 03-09 조건문 (0) | 2023.04.12 |