목차
- 함수와 매개변수
- 함수란?
- 매개 변수
- 자주 발생할 수 있는 실수들
- 다양한 매개 변수
- '기본' 매개 변수
- '가변' 매개 변수
- '키워드' 매개 변수
함수란?
Python의 함수는 특정 작업을 수행하는 재사용 가능한 코드 블록입니다. 입력 인수(있는 경우)를 사용하고 일련의 작업을 수행하며 출력(있는 경우)을 생성합니다. 다음은 두 개의 숫자를 입력으로 받아 함께 더하고 결과를 반환하는 간단한 함수의 예입니다.
def add_numbers(x, y):
sum = x + y
return sum
이 예에서 add_numbers는 함수의 이름이고 x와 y는 입력 인수이며 sum은 x와 y의 합계를 저장하는 변수입니다. 'return' 문은 함수의 출력을 지정하며, 이 경우에는 'sum' 값입니다. 해당 함수를 출력하려면 위 사진과 같이 정의된 함수에 값을 넣어 print 할 수 있습니다.
이런 식으로 함수를 정의한 후에는 코드의 어느 곳에서나 함수를 호출하고 설계된 작업을 수행하는 데 사용할 수 있습니다. 예를 들면 다음과 같습니다.
result = add_numbers(5, 3)
print(result) # Output: 8
이 예에서 add_numbers 함수는 입력 인수 3 과 4가 함께 호출되고 결과(7)은 result 변수에 할당됩니다. 마지막으로 print 문은 result의 값을 콘솔에 출력합니다. 처음 사진처럼 바로 출력하는 방법과 위 사진 처럼 또 다른 변수를 지정해 출력하는 방법 중 편한 방법으로 사용하면 될 것 같습니다.
매개 변수
Python에서 매개변수는 함수가 호출될 때 함수에 전달되는 값에 대한 자리 표시자 역할을 하는 변수입니다. 사용자의 필요에 따라 다른 입력 값을 취함으로써 기능을 보다 유연하고 재사용할 수 있습니다. 함수가 호출될 때 함수에 전달되는 실제 값을 인수라고 합니다.
다음은 매개변수의 개념을 설명하는 예시입니다.
def greet(name): # 'name' 은 파라미터 입니다.
print(f"Hello, {name}!")
# 다른 인수로 함수 불러오기
greet("철수") # '철수'가 인수입니다.
greet("영희") # '영희'가 인수입니다.
이 예에서 greet 함수에는 name이라는 단일 매개변수가 있습니다. greet 함수를 호출할 때 name 매개변수를 대체하는 다른 인수("Alice" 및 "Bob")를 전달합니다. 그런 다음 함수는 전달된 인수를 사용하여 인사말 메시지를 인쇄합니다.
자주 발생할 수 있는 실수들
1. 매개변수 이름 철자 오류
함수 내에서 철자가 틀린 매개변수 이름이 사용되는 경우 함수를 호출할 때 오류가 발생하거나 잘못된 동작이 발생할 수 있습니다.
def greet(user_name): # 올바른 파라미터 이름
print(f"Hello, {username}!") # 값 이름에 오타가 있어 NameError가 출력됩니다.
print(f"Hello, {user_name}!" # 올바른 방법
greet("철수")
2. 함수를 호출할 때 괄호를 잊어버리기
함수를 호출할 때 괄호를 추가하는 것을 잊으면 예상 반환 값이 아닌 함수 개체 자체에 대한 참조가 발생합니다.
def square(x):
return x * x
result = square # 괄호가 없습니다.
result = square(4) # 올바른 방법
print(result(4)) # TypeError: 'function' object is not callable가 출력됩니다.
print(result) # 올바르게 출력하는 방법
3. 잘못된 인수 수
인수가 너무 적거나 너무 많은 함수를 호출하면 TypeError가 발생할 수 있습니다. 함수를 호출할 때 올바른 개수의 인수를 제공해야 합니다.
def add(a, b):
return a + b
result = add(1) # 두 번째 인수가 없기 때문에 TypeError가 출력됩니다.
result = add(1, 2)
4. 인수 유형을 고려하지 않음
함수에 전달된 인수 유형을 고려하지 않으면 예기치 않은 동작이나 TypeError 또는 AttributeError와 같은 오류가 발생할 수 있습니다. 인수 유형을 확인하고 그에 따라 처리하거나 예상되는 입력 유형을 명확하게 문서화하는 것이 좋습니다.
def greet(name):
print(f"Hello, {name}!")
greet(123) # 출력이 될 수 있으나 에러가 발생할 가능성도 있습니다.
greet("Alice") # 올바른 방법
5. 내장 함수 덮어쓰기
실수로 매개변수에 대한 내장 함수와 동일한 이름을 사용하면 예기치 않은 동작이 발생하고 함수 범위 내에서 내장 함수에 액세스할 수 없게 될 수 있습니다.
def power(base, pow): # power 함수는 pow로 쓰기도 합니다. 때문에 충돌할 가능성이 있습니다.
return base ** pow
def power(base, exponent): # 파라미터 'pow'를 'exponent'로 변경해줍니다.
return base ** exponent
result = power(2, pow(2, 3)) # pow로 지정하고 출력하면 TypeError가 출력됩니다.
6. 함수 인수 수정
목록이나 사전과 같은 변경 가능한 함수 인수를 수정하면 호출자가 원래 개체가 이전 버전을 출력하지 못하는 등 부작용이 발생할 수 있습니다. 이를 방지하려면 변경 가능한 객체를 수정하기 전에 사본을 만들어야 합니다.
def add_item(item, items_list):
items_list.append(item)
return items_list
original_list = [1, 2, 3]
result = add_item(4, original_list)
print(original_list) # Output: [1, 2, 3, 4] (expected output: [1, 2, 3])
* 복사본을 만드는 예시
def add_item(item, items_list):
new_list = items_list.copy() # Create a copy of the input list
new_list.append(item)
return new_list
original_list = [1, 2, 3]
result = add_item(4, original_list)
print(original_list) # Output: [1, 2, 3]
7. 변경 가능한 기본 매개변수 사용
목록이나 사전과 같은 변경 가능한 개체를 기본 매개 변수 값으로 지정하면 동일한 변경 가능한 개체가 함수 호출 간에 재사용되기 때문에 의도하지 않은 부작용이 발생할 수 있습니다.
def add_item(item, items_list=[]):
items_list.append(item)
return items_list
print(add_item(1)) # Output: [1]
print(add_item(2)) # Output: [1, 2] (expected output: [2])
이 문제를 방지하려면 None을 기본값으로 사용하고 필요한 경우 함수 내부에 변경 가능한 새 객체를 만듭니다.
def add_item(item, items_list=None):
if items_list is None:
items_list = []
items_list.append(item)
return items_list
8. 위치 및 키워드 인수 순서
위치 인수는 항상 키워드 인수 앞에 와야 합니다. 순서를 섞으면 구문 오류가 발생하거나 값이 매개변수에 잘못 할당될 수 있습니다.
def example_function(a, b, c=0, d=0):
pass
example_function(1, 2, 3, d=4) # Correct
example_function(1, b=2, c=3, d=4) # Incorrect, raises a syntax error
9. 매개변수 이름 충돌
가변 길이 인수 목록(*args 및 **kwargs)을 사용할 때 다른 매개변수의 이름이 매개변수에 전달된 키워드 인수의 이름과 충돌하지 않는지 확인해야합니다.
def example_function(a, b, *args, c=0, d=0, **kwargs):
pass
example_function(1, 2, 3, 4, c=5, d=6, e=7, f=8) # 옳은 방법
example_function(1, 2, 3, 4, a=5, b=6, c=7, d=8) # 틀린 방법으로 a와 b는 앞에서 이미 지정되었습니다.
10. 선택적 매개변수를 처리하지 않음
선택적 매개변수를 사용할 때 선택적 매개변수가 제공되지 않는 경우를 함수가 처리할 수 있는지 확인해야합니다. 'None' 또는 기타 기본값을 확인하고 그에 따라 처리합니다.
def greet(name, greeting=None):
if greeting is None:
greeting = "Hello"
print(f"{greeting}, {name}!")
greet("철수") # Output: Hello, 철수!
greet("영희", "Hi") # Output: Hi, 영희!
Python 함수에서 매개 변수를 지정할 때 이러한 일반적인 실수를 인식하고 모범 사례를 따르면 오류를 방지하고 보다 강력하고 유지 관리가 수월한 코드를 작성할 수 있습니다.
나머지는 2편에 올라올 예정입니다!
'Python > Python 기본' 카테고리의 다른 글
[Python] 리턴 값(return value)이란? (0) | 2023.04.29 |
---|---|
[Python] 파이썬에서 함수와 매개 변수 (2) (0) | 2023.04.28 |
[Python] while 반복문 사용법과 예 (0) | 2023.04.25 |
[Python] For문과 다른 함수 복합사용 방법(range, list) (0) | 2023.04.25 |
[Python] range함수와 응용법들 (2) | 2023.04.23 |