function(parameter, argument)

Sang Jun Lee·2020년 6월 24일
0

function parameter의 종류와 성격에 대해 알아보고 활용법과 간단한 과제에 대해 알아보겠습니다.

1. parameter(매개변수)와 argument(전달인자)

매개변수는 함수의 정의부분에 나열되어 있는 변수들을 의미하며, 전달인자는 함수를 호출할때 전달되는 실제 값을 의미합니다.

    # parameter (매개변수)
    # 함수의 정의부분에 나열되어 있는 변수, 여기서는 a, b가
      parameter가 되겠습니다.
      def plus(a, b):  
        return a + b
      
	# argument (전달인자)
    # 함수를 호출할 때 실제 전달되는 값, 여기서는 1, 2가 
      argument가 되겠습니다.
      result = plus(1, 2)    

2. parameter의 순서

함수에서 parameter의 순서는 중요합니다. 순서에 맞쳐 argument값을 찾아 작업이 진행되니까요.

    # parameter의 순서에 따라 argument의 값을 넣어줘야 원하는 결과값을
    얻을 수 있습니다.
    def introduce_myself(name, age, gender):
    	return f"제 이름은 {name}이고 {gender}이고 {age}살 입니다."
    
    result = introduce_myself("홍길동", 100, "남자)

다만 key argument라고 해서 argument값을 넣을때 parament값을 키로 삼아 같이 입력하게 되면 순서에 영향을 받지 않게 됩니다.

    #  key argument방식으로 입력시 순서에 영향을 받지 않습니다. 
    def introduce_myself(name, age, gender):
    	return f"제 이름은 {name}이고 {gender}이고 {age}살 입니다."
    
    result = introduce_myself(gender = "남자, name ="홍길동",
    age = 100)

추가로 key argument방식으로 넣을때와 key 없이 argument 넣을때도 생각해볼 수 있을겁니다. key argument와 positional argument를 같이 사용하여 mixing positional argument라고 부르며 positional argument는 순서를 맞쳐서 입력해줘야 하며 그렇지 않으면 에러가 발생합니다.

SyntaxError: positional argument follows keyword argument

3. 활용

몇가지 과제를 통해 활용해보겠습니다.

3.1 default value parameter를 non-default value parameter 앞에 정의 하면 안된다는 이유는 뭘까요

실행 시 non-default value parameter의 argument의 값을 주게 될텐데요.
이미 값이 주어져 있는 parameter가 먼저와 있으면 충돌이 발생하게 되어
에러가 발생하게 될겁니다.

3.2 위치 인수(positional arguments)와 가변 인수(variable length arguments)의 위치를 참고 자료를 통해 조사해서 어떤에러 인지 확인하고 함수가 호출되도록 에러를 고치고 호출후에 출력되는 결과를 보여주세요

가변인수에 대해 설명하고 진행하겠습니다. 매개변수에 *를 붙여주는 것으로
여러 argument를 받을 수 있습니다. 그리고 명칭은 아무거나 해도 되지만
통상 arguments 에서 가져와 *args로 씁니다. 주의할 것은 가변 인수는
위치인수보다는 뒤에 있어야 하지만 꼭 맨뒤에 있어야 할 필요는 없습니다.
다만 가변인수로 인해 그 뒤에 다른 변수에 값을 줄 수 없기에 주의해야합니다.
아래 에러에 해결점이 될거 같네요.
    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'

이런 에러메시지를 받게 되고 20이 age라고 생각 할 수 있지만 arg로 인해 20도 arg 매개변수의 인자로 인식되어 age 매개변수의 인자는 없는것으로 인식되어 에러가 발생합니다.

수정하게 되면 아래와 같이 됩니다.

   def func_param_with_var_args(name, age, *args):
     print("name=",end=""), print(name)
     print("args=",end=""), print(args)
     print("age=",end=""), print(age)
      
   func_param_with_var_args("정우성", 20, "01012341234", "seoul")

3.3 가변 키워드 인수 (variable length keyword arguments)의 위치를 다음 참고 자료를 통해 조사해서 어떤에러 인지 확인하고 함수가 호출되도록 에러를 고치고 호출후에 출력되는 결과를 보여주세요.

**kwargs로 보여지는 가변키워드인수에 대해 설명하고 진행하겠습니다.
매개변수에 ** 를 붙이는 것으로 특성이 주어지며 *args과 비교해보면
*args는 tuple형식이고 **kwargs는 Dictionary형식입니다. 3.2번에서
age가 *args 뒤에 있을때 무시를 당했었는데 **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")

실행해보면

def func_param_with_kwargs(name, age, **kwargs, address=0):
SyntaxError: invalid syntax

구문 오류가 나고 아래와 같이 수정하여 진행하면 제대로된 결과값을 얻을 수 있습니다.

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

3.4 위치 인수와 키워드 가변 키워드 인수 (variable length keyword arguments)의 위치를 다음 참고 자료를 통해 조사해서 어떤에러 인지 확인하고 함수가 호출되도록 에러를 고치고 호출후에 출력되는 결과를 블로그에 정리해 주세요.

  def mixed_params(name="wecode", *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")

먼저 그냥 실행해보면 **kwargs 뒤의 address에서 syntaxError가 발생하여 **kwargs 앞으로 위치를 바꿔주는 것으로 해결이 가능하며 그 다음으로 age가 *args 뒤에 있어 적절한 인수값을 받지 못함으로 제일 앞으로 위치를 바꿔줌으로 에러를 해결하고 원하는 값을 가질 수 있게 됩니다.

  def mixed_params(age, name="wecode", *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")
profile
Live now and Dream better tomorrow

0개의 댓글