파이썬 기초 문법 - 02
Python
Function Parameters
함수의 변수를 정함에 있어 몇가지 규칙이 있다.
- 변수에는 일반 변수, *변수, **변수가 있다.
- *변수는 튜플형태이며 입력받은 변수 외 자료를 튜플형태로 저장한다.
- **변수를 가장 마지막 순서로 작성해야한다.
- 기본값 매개변수는 항상 일반 변수 뒤로 작성해야한다.
- 예외적으로 *변수 뒤에는 4번 규칙이 적용되지 않는다.
- *변수 뒤의 일반 변수는 함수 사용시 항상 변수명을 호출하여 입력해야한다.(위치는 상관없다.)
default value parameter와 non-default value parameter
4번 규칙에 대해 생각해 보자. 함수를 정의 할때 default value parameter(기본값 매개변수)를 non-default value parameter(기본값 미지정 매개변수, 일반 변수) 앞에 정의 하면 안 되는 이유는 무엇일까?
왜냐하면 기본값 매개변수은 생략이 가능하며 함수 사용시 생략했을때 일반 변수인지 기본값 매개변수인지 구별할 수 없기 때문이다.
Function Parameters 활용 예제 1
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)
위 예제를 실행해보자.
Traceback (most recent call last):
File "main.py", line 5, in
func_param_with_var_args("정우성", "01012341234", "seoul", 20)
TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'
에러코드 내용을 보니 age에 해당되는 값이 없다고 한다. 5번 규칙에 해당되는 내용이다.
age에 대한 값을 변수명을 통해 입력해주자.
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", age=20)
다시 실행해보자.
name=정우성
args=('01012341234', 'seoul')
age=20
제대로 출력되는것을 확인할 수 있다.
Function Parameters 활용 예제 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")
위의 예제를 실행해보자.
File "main.py", line 1
def func_param_with_kwargs(name, age, **kwargs, address=0):
SyntaxError: invalid syntax
함수의 변수를 확인해보니 **변수가 3번째에 위치하고 있다. 3번 규칙에 해당되는 내용이다.
**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
제대로 출력되는것을 확인할 수 있다.
Function Parameters 활용 예제 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")
위의 예제를 실행해보자.
File "main.py", line 1
def mixed_params(name="아이유", *args, age, **kwargs, address):
SyntaxError: invalid syntax
**변수가 4번째에 위치하고 있다. 3번 규칙에 해당되는 내용이다.
**kwargs를 수정해주도록 하자.
def mixed_params(name="아이유", *args, age, 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")
다시 실행해보자.
Traceback (most recent call last):
File "main.py", line 7, in
mixed_params(20, "정우성", "01012341234", "male" ,mobile="01012341234", address="seoul")
TypeError: mixed_params() missing 1 required keyword-only argument: 'age'
'age' 변수에 대한 내용이 없다고 한다. 5번에 해당되는 내용이다.
해결법은 두가지다. 함수의 'age' 변수를 'name'앞으로 옮기거나 함수사용시 'age'를 직접 호출하여 할당하는것이다.
먼저 'age' 변수를 옮겨보자.
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
제대로 출력되는것을 확인할 수 있다.
이번엔 'age'를 직접 호출하여 할당해보자.
def mixed_params(name="아이유", *args, age, 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(age = 20, "정우성", "01012341234", "male" ,mobile="01012341234", address="seoul")
다시 실행해보자.
File "main.py", line 7
mixed_params(age = 20, "정우성", "01012341234", "male" ,mobile="01012341234", address="seoul")
SyntaxError: positional argument follows keyword argument
'age'변수가 기본값 매개변수 앞에서 사용되어 에러가 생겼다. 4번 규칙에 해당되는 내용이다.
'address'변수 뒤로 옮겨주자.
def mixed_params(name="아이유", *args, age, 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("정우성", "01012341234", "male" ,mobile="01012341234", address="seoul", age = 20)
다시 실행해보자.
name=정우성
args=('01012341234', 'male')
age=20
kwargs={'mobile': '01012341234'}
address=seoul
제대로 출력되는것을 확인할 수 있다.
Author And Source
이 문제에 관하여(파이썬 기초 문법 - 02), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@deonii/파이썬-기초-문법-02저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)