Assignment: Function Parameter

Hyeon Soo·2021년 1월 14일
0
  1. Parameter 와 Argument
    Parameter는 선언한 함수가 받는 변수를 의미하고, Argument는 함수에 들어갈 실제 값을 의미하는 듯 하다.

    def plus(num1, num2):
    	return num1 + num2
    
    print(plus(1, 2))

    에서 함수 plus의 parameter는 num1, num2이고 arguemnt는 1, 2이다.

  1. Positional argument 와 Keyword argument
    기본적으로 함수에 입력되는 argument는 순서대로 입력이 진행된다. 즉, 기본적으로 positional argument 상태로 입력이 된다. 하지만, 이 순서를 바꿀 수 있다. argument를 입력할 때 parameter 이름에 대입하는 방식으로 입력 할 경우, 순서가 바뀌어도 원하는 위치에 입력이 된다. 이를 keyword argument라고 한다. 위의 예시를 기준으로 예를 들어 보면

    def plus(num1, num2):
    	return num1 + num2
    print(plus(num2 = 2, num1 = 1))

    다음과 같이 입력할 경우, 순서는 num2와 num1 순으로 입력이 되어야 하지만 실제로 num1자리에 1이, num2 자리에 2가 입력되어 처리된다.
    이때, keyword argument와 positional argument를 동시에 사용할 경우 입력하는 순서에 있어서 주의가 필요하다. 다음의 경우

    def plus(num1, num2, num3):
    	return num1 + num2 + num3
    print(plus(num1 = 1, 2, 3))

    python은 syntaxerror를 반환하는데, 이는 keyword argument 뒤로 positional argument가 왔기 때문이라고 한다. 위의 경우 num1 = 1을 마지막으로 입력해주면 해결이 된다.

  2. Default value parameter
    함수를 선언하고 사용할 때, 기본적으로 parameter의 수 만큼 argument를 입력해주지 않으면 함수가 실행되지 않는다. 즉, parameter에 값이 주어지지 않으면 함수가 실행되지 않는다는 의미이다. 그렇기 때문에, argument를 부여하지 않아도, parameter에 default로 적용되는 값을 부여한다면 argument를 모두 선언하지 않더라도 parameter에 값이 지정되기 때문에 함수가 실행이 된다. 이렇게 argument를 입력하지 않아도 parameter 자체가 기본값을 가지는 parameter를 default value parameter라고 한다. parameter에 default value를 부여하는 방법은 다음과 같다.

    def plus(num1, num2=0):
    	return num1 + num2
    print(plus(1))

    위를 실행하면 함수가 실행이 되며, 값은 1을 반환한다. num2 parameter에 default 값으로 0이 부여된 것이다.
    이때, default value parameter 는 non-default value parameter 앞에 위치할 수 없다. 다음의 예시를 보면

    def plus(num1=0, num2, num3):
    	return num1 + num2 + num3
    print(plus(1, 2))

    이 경우 num1을 default value인 0으로 처리할 지 아니면 1로 처리할지 프로그램은 알지 못한다. 그렇기 때문에 오류가 발생하는데, 만약 num1 = 0 이 맨 뒤에 위치한다면 위의 함수는 3을 반환한다.

  3. Positional arguments 와 Variable length arguments
    Variable length arguments는 keyword가 정의되지 않은 상태의 여러 변수들을 한꺼번에 입력할 수 있는 argument 이다. 표현은 *args로 하며, 순서는 일반적인 positional argument 뒤, keyword 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)

    의 경우, TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'라는 오류를 반환한다. 이는 arg가 여러 argument를 받기 때문에, 마지막의 age 변수가 받을 값까지 args가 가져갔기 때문이다. 그래서 *args를 마지막으로 보내고, 함수의 argument 중 20을 정우성 뒤로 위치시키면 오류를 해결할 수 있다. 또는, 마지막 argument 20을 age = 20으로 자리를 지정해주면 된다.

  1. Variable length keyword arguments
    이것은 keyword가 정해져 있는 상태의 여러 변수를 입력할 수 있는 argument이다. 표현은 **kwargs로 한다. 위치의 경우

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

    이때 python은 첫번째 줄에서의 문법 오류를 반환한다. Variable length keyword arguments는 keyword argument 중에서도 마지막에 위치하는 것이 원칙이다. 그래서 위의 경우, **kwargs를 마지막으로 보내면 오류 없이 원하는 결과를 반환받을 수 있다.

  1. Positional argument 와 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")

    를 수정할 수 있다. 수정은 parameter를 수정하는 방법과 parameter와 argument를 동시에 수정하는 방법이 있을 수 있는데, 전자로 수행하고자 한다.

    def mixed_params(age, name="아이유", *args, address, **kwargs)

    이렇게 고치면 오류 없이 반환받을 수 있다.

0개의 댓글