Function Parameters

brian_j·2022년 5월 1일
0

Function Parameters

  1. Function Parameters
    앞서 함수는 input parameter를 받아서 return 값을 output으로 리턴한다고 배웠습니다. 그리고 함수를 호출할때 parameter를 함수에 건내주어서(pass) 호출 한다고 배웠습니다. 함수의 parameter에는 여러 형태가 있는데요, 하나씩 보도록 하겠습니다. 먼저 가장 기본적인 형태는 순서대로 값이 parameter로 함수에 전해지는 경우입니다.
  1. Keyword Arguments
    하지만 위의 경우 처럼 순서에 맞추어서 parameter 값을 전해주지 않을수 있는 방법도 있습니다.

순서 대신에 parameter 이름으로 맞추어서 값을 전해줄 수 있으며, 이를 keyword argments 라고 합니다.

Keyword arguments 방식으로 parameter 값을 전해주면 실제 parameter 순서가 바뀌어도 괜찮습니다.

순서가 바뀌어도 괜찮다는 점 말고도 또 가독성도 높아진다는 점도 있습니다. parameter 순서에 맞추어 값을 함수에 넘기는 경우, 실수로 값이 바뀌어도 알기가 힘들다는 단점이 있습니다. 그에 비해 keyword arguments는 parameter 이름에 맞추어서 값을 함수에 넘기기 때문에 실수로 값이 바뀔 확률이 상대적으로 적다고 할 수 있습니다. 또한 코드를 읽는 사람도 어떠한 값을 넘기는건지 명확하게 알 수 있기 때문에 가독성도 높아진다고 할 수 있습니다.

  1. Mixing positional arguments and keyword arguments
    순서를 맞추어서 parameter 값을 전해주는 positional arguments와 keyword arguments를 혼용하여 사용하는것도 가능합니다.

다만, 여기서 중요한것은 keyword arguments 는 순서가 바뀌어도 상관 없지만 positional arguments 부분은 순서를 지켜줘야 한다는 것입니다.

예를 들어, 아래 코드처럼 함수를 호출하면 error가 납니다. 에러가 나는 이유는 keyword argument가 positional argument 보다 더 앞으로 위치되어 함수가 호출되었기 때문입니다. Positional arguments는 순서를 지켜주어야 하는데 순서가 틀렸기 때문에 에러가 나는것입니다.

def love_you(my_name, your_name): 
   print(f"{my_name} loves {your_name}") 
   
   love_you(your_name = "아이유", "정우성")

> Traceback (most recent call last):
    File "python", line 1
SyntaxError: positional argument follows keyword argument
  1. Parameter Default Value
    함수의 parameter에 default 값을 정의해 줄 수 도 있습니다. Default 값이 정의된 paramter는 함수가 호출될때 값이 넘겨지 않아도 괜찮습니다. 값이 넘겨지 않은 경우 default 값이 자동으로 넘겨지게 됩니다.

다만, 조심해야 할점은 default 값이 정의된 parameter가 default 값이 정의 되지 않은 parameter보다 먼저 위치해 있으면 안된다는 점입니다. 만일 default value parameter를 non-default value parameter 앞에 선언하면 syntax error가 납니다.

def love_you(my_name = "정우성", your_name): 
    print(f"{my_name} loves {your_name}") 
   
> Traceback (most recent call last):   
    File "python", line 1 
SyntaxError: non-default argument follows default argument

Assignment

이번 과제는 programming 과제가 아니라 개념을 이해하고 설명하는 과제 입니다. 아래 내용들을 블로깅 한 후 해당 블로그 주소를 Google Classroom 과제로 제출 해주세요.

1. 함수를 정의 할때 default value parameter를 non-default value parameter 앞에 정의 하면 안 되는 이유에 대해 생각해보시고 블로깅 해주세요.

default value parameter를 non-default value parameter보다 앞에 정의하면, 컴퓨터 입장에서 default value parameter인지 non-default value parameter 인지 구분 할 수 없으므로, syntax error가 발생한다.

2. 위치 인수(positional arguments)와 가변 인수(variable length arguments)의 위치를 참고 자료를 통해 조사해서 어떤 에러가 발생 하는지 확인하고, 에러를 고쳐 정상적으로 출력되는 결과를 블로그에 정리해 주세요.

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)

3. 가변 키워드 인수 (variable length keyword arguments)의 위치를 참고 자료를 통해 조사해서 어떤 에러가 발생 하는지 확인하고, 에러를 고쳐 정상적으로 출력되는 결과를 블로그에 정리해 주세요.

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")


4. 위치 인수와 키워드 가변 키워드 인수 (variable length keyword arguments)의 위치를 위치를 참고 자료를 통해 조사해서 어떤 에러가 발생 하는지 확인하고, 에러를 고쳐 정상적으로 출력되는 결과를 블로그에 정리해 주세요.

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")

참고 자료
https://getkt.com/blog/python-keyword-only-arguments/

0개의 댓글