파이썬 기초 문법 - 02

Dalbi·2021년 3월 18일
0
post-thumbnail
post-custom-banner

Python

Function Parameters

함수의 변수를 정함에 있어 몇가지 규칙이 있다.

  1. 변수에는 일반 변수, *변수, **변수가 있다.
  2. *변수는 튜플형태이며 입력받은 변수 외 자료를 튜플형태로 저장한다.
  3. **변수를 가장 마지막 순서로 작성해야한다.
  4. 기본값 매개변수는 항상 일반 변수 뒤로 작성해야한다.
    • 예외적으로 *변수 뒤에는 4번 규칙이 적용되지 않는다.
  5. *변수 뒤의 일반 변수는 함수 사용시 항상 변수명을 호출하여 입력해야한다.(위치는 상관없다.)

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

제대로 출력되는것을 확인할 수 있다.

profile
백엔드..?
post-custom-banner

0개의 댓글