TIL #6 Function Para meters

tycode·2021년 6월 12일
0

TIL

목록 보기
6/30

Parameter 순서

파이썬에서 parameter를 받아야되는 순서는 다음과 같다.

위치 인자 - 기본값 인자 - 가변 인자 - 키워드 인자 - 키워드 가변 인자

def order(a, b, c=None, r="w", d=[], *args, **kargs)

a, b: positional parameter
c=None: optional parameter
r="w": keyword parameter
d=[]: list parameter
*args: keyword-only
**kargs: var-keyword paramter

용어

  • 매개변수(parameter) : 함수에 전달된 데이터를 대입하기 위한 변수, 함수 선언 시 작성

  • 인자(argument) : 함수에 전달하는 데이터 자체

  • 위치 인자(positional argument): 인자와 매개변수에 위치와 일치시키는 인자

  • 키워드 인자(keyword argument) : 매개변수에 이름으로 일치시키는 인자

  • 가변 인자(variable length positional argument) : 여러 개의 위치 인자를 받을 때 사용, 주로 *args 사용, 튜플로 받음

  • 키워드 가변 인자(variable length positional argument) : 여러 개의 키워드 인자를 받을 때 사용, 주로 **kwrags 사용, 딕셔너리로 받음

  • 매개변수 기본값(parameter default value) : 함수를 정의할때 기본값 지정, 함수를 사용할때 인자를 보내지않는다면 미리 지정한 기본값을 사용

Default value parameter and Non-default value parameter

함수의 parameter에 default값을 정의해 줄 수 있다. Default 값이 정의된 parameter는 함수가 호출될 때 값이 넘어가지 않아도 된다. 값이 넘겨지지 않은 경우 default값이 자동으로 넘겨지게 된다.

def fact(user, computer = "Mac"):
    print(f"Many {user} prefer {computer} than Windows")

fact("Backend-developers")

호출
#"Many Backend-developers prefer Mac than Windows"

⚠️주의) default값이 정의된 parameter가 default값이 정의되지 않은 parameter보다 먼저 위치해 있으면 안된다. 그렇지 않으면 에러가 발생한다.

def fact(user = "Mac", computer):
    print(f"Many {user} prefer {computer} than Windows")

fact("Backend-developers")

SyntaxError: non-default argument follows default argument
이와 같이 syntax error가 발생한다.

Positional arguments & Variable length arguments

위치 인수와 가변 인수의 잘못된 위치로 인한 오류.

> 오류 예시
def func_param_with_var_args(name, *args, age):
    print("name=", name)
    print("args=", args)
    print("age=", age)

func_param_with_var_args("김코드", "12345", "Seoul", 30)

TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'

> 해결 방법1
func_param_with_var_args("김코드", "12345", "Seoul", age=30)
  • *args뒤에 있는 age는 키워드 인자가 위치하는 곳이기 때문에 호출시 age=20으로 해야한다.
> 해결 방법2
def func_param_with_var_args(name, age, *args):
    print("name=", name)
    print("args=", args)
    print("age=", age)

func_param_with_var_args("김코드", 30,  "12345", "Seoul")
  • age를 위치 인자로 *args 앞에 옮기고 호술시 args보다 앞에 두었다.

Variable length keyword arguments

키워드 가변 인자의 잘못된 위치.

오류 예시
def func_param_with_kwargs(name, age, **kwargs, address=0):
    print("name=", name)
    print("age=", age)
    print("kwargs=", kwargs)
    print("address=", print(address)
 
func_param_with_kwargs("김코드", "20", mobile="12345", address="Seoul")

SyntaxError: invalide syntax

해결 방법
def function_param_with_Kwargs(name, age, address=0, **kwargs):
    		.
            	.
                .
   
func_param_with_kwargs("김코드", "20", mobile="12345", address="Seoul")
  • 키워드 가변 인자 **kwargs 뒤에는 어떠한 인자도 위치할 수 없다. 함수 정의 시 **kwargs는 맨 뒤에 위치해야 한다.

Positional arguments & Variable length keyword arguments

오류 예시
def mixed_params(name="김코드", *args, age, **kwargs, address):
    print("name=", name)
    print("args=", args)
    print("age=", age)
    print("kwargs=", kwargs)
    print("address=", address)

mixed_params(20, "박쟝고", "12345", "male" ,mobile="12345", address="seoul")
해결 방법
def mixed_params(age, name="김코드", *args, address, **kwargs):
    		.
        	.
            	.

mixed_params(20, "박쟝고", "12345", "male" ,mobile="12345", address="seoul")
  • age를 앞으로 이동시키고(위치 인자로) *kwargs를 맨뒤로 이동시켰다(키워드 전용 인자로).

0개의 댓글