English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
서버사용자 정의 함수본문에서는 함수 정의 및 호출에 대한 지식을 배웠습니다. 함수 호출 방법을 몰라서 예측할 수 없는 오류가 발생할 수 있습니다. 아래는 예시입니다.
def greet(name, msg): """이는 인사하는 함수입니다 name, msg 두 개의 파라미터가 있습니다""" print("Hello", name + ', '' + msg) greet("Monica", "Good morning!")
출력 결과
Hello Monica, Good morning!
greet() 함수는 두 개의 파라미터를 가집니다.
이 함수는 두 개의 파라미터를 사용하여 호출되었기 때문에, 함수가 정상적으로 실행되었으며 오류가 발생하지 않았습니다.
参数의 개수가 다를 때 호출하면, 인터프리터는 오류 메시지를 표시합니다. 아래는 이 함수의 호출 방법으로, 단일 파라미터를 사용하는 경우와 파라미터를 사용하지 않는 경우를 실행한 후 각각 표시된 오류 메시지를 보여줍니다.
>>> greet("Monica") # 하나의 매개변수만 전달 TypeError: greet() missing 1 required positional argument: 'msg'
>>> greet() # 아무 매개변수도 전달하지 않음 TypeError: greet() missing 2 required positional arguments: 'name' and 'msg'
지금까지 함수는 고정된 수의 매개변수를 가지고 있었습니다. Python에서는 함수를 정의할 때 변경 가능한 수의 매개변수를 가질 수 있는 다른 방법도 있습니다.
이런 유형의 세 가지 다른 형식을 소개합니다.
Python에서 함수 매개변수는 기본값을 가질 수 있습니다.
매개변수에 기본값을 제공하기 위해 대입 연산자 (=)를 사용할 수 있습니다. 이는 예제입니다.
def greet(name, msg="아침하세요!"): """ 이 함수는 메시지를 제공한 사람에게 인사를 합니다. 메시지를 제공하지 않으면, 그렇지 않으면 "아침하세요!"으로 설정됩니다. """ print("이렇게", name + ', '' + msg) greet("장산") greet("리시", "지금은 어떻게 지내세요?")
출력 결과
이렇게, 장산, 아침하세요! 이렇게, 리시, 지금은 어떻게 지내세요?
이 함수에서 매개변수 name은 기본값이 없으므로 함수 호출 시 name 매개변수에 값을 전달해야 합니다.
반면에 매개변수 msg의 기본값은 "Good morning!"입니다. 따라서 함수 호출 시 값을 전달하지 않아도 됩니다. 호출 시 값을 전달하면 기본값을 대체합니다.
함수 내의 매개변수들은 기본값을 가질 수 있는 수가 제한적이지만, 기본값이 설정되면 기본값의 오른쪽에 있는 모든 매개변수들도 기본값을 가지고 있어야 합니다.
이렇게 하면 비표준 매개변수는 표준 매개변수 뒤에 오지 않습니다. 예를 들어, 위의 함수 헤더를 다음과 같이 정의하면:
def greet(msg = "Good morning!", name):
다음과 같은 오류 메시지를 받게 됩니다:
SyntaxError: non-default argument follows default argument
함수에 특정 값을 전달할 때, 이 값들은 그 위치에 매개변수로 할당됩니다.
예를 들어, 위의 greet() 함수를 greet("Bruce", "How do you do?")로 호출하면, 값 "Bruce"가 매개변수에 할당됩니다.name이제 "How do you do?"를 msg에 할당했습니다.
파이썬은 키워드 매개변수를 사용하여 함수를 호출할 수 있습니다. 이 방식으로 함수를 호출할 때 매개변수의 순서(위치)를 변경할 수 있습니다. 이 함수에 대한 이후 호출은 모두 유효하며 동일한 결과를 생성합니다.
# 2개 키워드 매개변수 greet(name="Bruce", msg="How do you do?") # 2개 키워드 매개변수, 매개변수 순서 변경 greet(msg="How do you do?", name="Bruce") #1 개 위치 매개변수, 1 개 키워드 매개변수 greet("Bruce", msg="How do you do?")
그러나 우리는 함수 호출 중에 위치 매개변수와 키워드 매개변수를 혼합할 수 있습니다. 그러나 우리는 키워드 매개변수가 위치 매개변수 이후에 따라야 한다는 점을 기억해야 합니다.
키워드 매개변수 이후에 위치 매개변수를 두면 오류가 발생합니다. 예를 들어, 함수 호출은 다음과 같습니다:
greet(name="Bruce","How do you do?")
오류가 발생할 수 있습니다:
SyntaxError: non-키워드 매개변수 이후 키워드 매개변수
때로는 함수에 전달될 매개변수의 수를 미리 알 수 없습니다. 파이썬은 매개변수 수가 불확정인 함수 호출을 통해 이러한 상황을 처리할 수 있게 합니다.
함수 정의에서, 우리는 매개변수 이름 앞에 스타일(*)를 사용합니다.*)를 사용하여 이러한 매개변수를 나타냅니다. 이는 예제입니다.
def greet(*names): """이 함수는 인사를 받는 대상으로 튜플 목록에 있는 모든 사람.""" # 이름은 매개변수를 가진 튜플입니다 for name in names: print("Hello", name) greet("Monica", "Luke", "Steve", "John")
출력 결과
헬로 몬리카 헬로 루크 헬로 스티브 헬로 홈
여기서, 우리는 여러 가지 매개변수를 가진 함수를 호출했습니다. 이 매개변수들은 함수에 전달하기 전에 튜플로 포장됩니다. 함수 내에서, 우리는 for 루프를 사용하여 모든 매개변수를 가져옵니다.