티스토리 뷰
파이썬에서 함수를 정의할 때 def 키워드로 정의하며 함수 이름 뒤 괄호 안에 parameter(매개변수)를 지정하면 된다.
이 parameter는 원하는 만큼 추가할 수 있으며 쉼표(,)로 구분한다.
기본적으로 함수는 호출 시 기입한 인수의 개수와 parameter의 개수가 다르면 오류가 발생한다.
* 매개변수는 함수 정의에서 괄호 안에 나열된 변수
* 인수는 호출될 때 함수에 전송되는 값
def function(parameter):
# 내부 코드는 들여쓰기를 해야한다.
print("함수 선언")
# 함수 호출 시 함수명과 괄호를 사용한다
function(인수)
함수의 괄호 안에 싸인 parameter(매개 변수)는 일반 매개변수, *가변매개변수(*args), 기본 매개변수, **키워드 매개변수(**kwargs)가 있다.
일반매개변수(non-default value parameter)
일반 매개변수는 인수의 개수와 일반 매개변수의 개수가 다르면 오류가 발생한다. 또한 다른 매개변수를 같이 쓸 때에는 맨 앞에 써넣어야 한다.
기본 매개변수(default value parameter)
기본 매개변수는 '매개변수=값' 형태이며 함수를 호출할 때 매개변수를 넣지 않아도 기본 값으로 설정한 값이 들어간다.
*가변 매개변수 (*args) (Variable Length Positional Arguments)
가변 매개변수는 수가 유동적으로 변하는 함수를 튜플 자료형
**키워드 매개변수 (**kwargs) (Variable Length Keyword Arguments)
키워드 매개변수는 직접 매개 변수명을 지정하여 매개변수를 전달한다. 키워드(key = value)매개변수를 입력하면 함수 내에서 딕셔너리로 인식하며,순서가 바뀌어도 상관없이 전달된다.
def function(일반매개변수, *가변매개변수, 기본매개변수=n) :
# 함수 내부 코드 작성 시 들여쓰기 작성
print(일반매개변수)
print(*가변매개변수)
print(기본매개변수)
# 함수 선언
function( 1,2,3,4,5,기본매개변수=100 )
# 실행결과
1 # 일반매개변수
(2 3 4 5) # *가변매개변수로 전달받은 인자들은 튜플로 묶인다
100 # 기본매개변수
매개변수들의 위치를 바꾸게 된다면 실행 시 아래와 같은 내용이 출력된다.
def function(*가변매개변수,일반매개변수, 기본매개변수=100) :
# 함수 내부 코드 작성 시 들여쓰기 작성
print(*가변매개변수)
print(기본매개변수)
print(일반매개변수)
# 함수 선언
function( 1,2,3,4,5, 기본매개변수=100 )
# 실행결과
Traceback (most recent call last):
File "/Users/yujeong/Project/test/function.py", line 10, in <module>
function( 1,2,3,4,5 )
TypeError: function() missing 1 required keyword-only argument: '일반매개변수'
function 함수를 선언할 때 괄호 안에 ( 1,2,3,4,5, 기본 매개변수 =100)을 넣었는데 코드 실행 시
missing 1 required keyword-only argument: '일반매개변수' 가 나온다.
일반 매개변수를 찾을 수 없다는 뜻인데
가변 매개변수는 수가 유동적으로 변하는 함수이기 때문에 function (1,2,3,4,5, 기본 매개변수= 100 ) 안에서 1,2,3,4,5 모두 가변 매개변수로 인식하여 일반 매개변수를 찾을 수 없어 나오는 오류이다. (틀렸을 수도 있음....)
마찬가지로 함수에 기본 매개변수를 먼저 넣고 일반 매개변수를 넣어 실행하면 아래와 같이 오류가 출력된다.
왜 기본매개변수(default value parameter) 뒤에는 일반 매개변수(non-default value parameter)가 올 수 없을까?
아래 코드를 실행하면 에러가 발생하는데 함수 정의에서 일반매개변수가 앞에 와야하기 때문에 코드는 SyntaxError가 발생했다.
# 기본매개변수 name="jin" 과 일반매개변수 age 인 함수
def user(name="jin", age):
print(name, '! You are learning Python!')
age = input("What is your age?")
user(age)
# 실행결과
SyntaxError: non-default argument follows default argument
매개변수 위치에 따른 오류와 해결방법
def func_param_with_var_args(name, *args, age):
print("name=",end=""), print(name)
print("args=",end=""), print(args)
print("age=",end=""), print(age)
func_param_with_var_args("정우성", "01012341234", "seoul", 20)
# 실행결과
func_param_with_var_args("정우성", "01012341234", "seoul", 20)
TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'
- 풀이
1. *가변매개변수는 일반 매개변수 뒤에 와야 하기 때문에 def func_param_with_var_args(name, age, *args) 위치를 바꿔주었다.
(name, *args, age) -> (name, age, *args)
2. 함수 호출 시에도 age 값의 위치를 동일하게 변경하여 출력하였다.
# 1. 함수 매개변수순서 바꾸기
def func_param_with_var_args(name, age, *args):
print("name=",end=""), print(name)
print("args=",end=""), print(args)
print("age=",end=""), print(age)
# 2. 함수 선언 시 매개변수 순서 바꿔서 호출
func_param_with_var_args("정우성", 20, "01012341234", "seoul")
2. **가변키워드변수에 위치에 따른 오류
def func_param_with_kwargs(name, age, **kwargs, address=0):
print("name=",end=""), print(name)
print("age=",end=""), print(age)
print("kwargs=",end=""), print(kwargs)
print("address=",end=""), print(address)
func_param_with_kwargs("정우성", "20", mobile="01012341234", address="seoul")
# 실행결과
def func_param_with_kwargs(name, age, **kwargs, address=0):
^^^^^^^
SyntaxError: invalid syntax
- 풀이
1. 가변키워드변수 또한 일반 매개변수 앞에 올 수 없기 때문에 def func_param_with_kwargs(name, age, address=0, **kwargs) 위치를 바꿔주었다.
(name, age, **kwargs, address=0) ->(name, age, address=0, **kwargs)
# 함수의 **가변키워드변수의 위치를 옯겨준다
def func_param_with_kwargs(name, age, address=0, **kwargs):
print("name=",end=""), print(name)
print("age=",end=""), print(age)
print("kwargs=",end=""), print(kwargs)
print("address=",end=""), print(address)
func_param_with_kwargs("정우성", "20", mobile="01012341234", address="seoul")
# 실행결과
name=정우성
age=20
kwargs={'mobile': '01012341234'}
address=seoul
3. 일반매개변수 위치와 가변 매개변수 위치 오류
def mixed_params(name="아이유", *args, age, **kwargs, address):
print("name=",end=""), print(name)
print("args=",end=""), print(args)
print("age=",end=""), print(age)
print("kwargs=",end=""), print(kwargs)
print("address=",end=""), print(address)
mixed_params(20, "정우성", "01012341234", "male" ,mobile="01012341234", address="seoul")
# 실행결과
def mixed_params(name="아이유", *args, age, **kwargs, address):
^^^^^^^
SyntaxError: invalid syntax
- 풀이
1. 일반매개변수(age) 위치 오류로 age 위치를 변경해준다.
2. 가변매개변수(**kwargs)위치를 맨 뒤로 변경해준다.
# 함수 일반매개변수(age)와 가변매개변수(address)위치를 변경해준다.
def mixed_params(age, name="아이유", *args, address, **kwargs):
print("name=",end=""), print(name)
print("args=",end=""), print(args)
print("age=",end=""), print(age)
print("kwargs=",end=""), print(kwargs)
print("address=",end=""), print(address)
mixed_params(20, "정우성", "01012341234", "male" ,mobile="01012341234", address="seoul")
# 실행결과
name=정우성
args=('01012341234', 'male')
age=20
kwargs={'mobile': '01012341234'}
address=seoul
'study > Python' 카테고리의 다른 글
Class (0) | 2022.06.27 |
---|---|
기본 자료형 (0) | 2022.06.24 |
List 와 Array 의 차이 (0) | 2022.06.18 |
Tuple (0) | 2022.06.16 |
List, Dictionary 관련 기본 함수 및 리스트 내포 (0) | 2022.06.16 |
- Total
- Today
- Yesterday
- path variable
- musma
- 배열
- Magazine K
- git 공부
- django-environ
- 면접을 위한 CS 전공 지식 노트
- python3
- 환경 변수 설정
- 웹페이지
- django.contrib.auth
- API
- authenticate()
- 검색 결과 내 페이지네이션
- Java
- 암호화
- django
- 회원가입
- git
- Python
- 회원 로그인
- git공부
- Spring
- 한글 형태소 분석기
- 톰캣
- error: failed to push some refs to 'https://github.com/
- 디자인 패턴
- 커맨드 객체
- Django tutorial
- 혼자 공부하는 파이썬
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |