Function Parameters!

sh_awtylol4·2022년 3월 5일
0

wecode 31기

목록 보기
9/24

사전적 정의

  • 매개변수(parameter) : 함수에 전달된 데이터를 대입하기 위한 변수, 함수 선언 시 작성
  • 인자(argument) : 함수에 전달하는 데이터 자체
  • 위치 인자(positional argument): 인자와 매개변수에 위치와 일치시키는 인자
  • 키워드 인자(keyword argument) : 매개변수에 이름으로 일치시키는 인자
  • 가변 인자(variable length positional argument) : 여러 개의 위치 인자를 받을 때 사용, 주로 *args 사용, 튜플로 받음
  • 키워드 가변 인자(variable length positional argument) : 여러 개의 키워드 인자를 받을 때 사용, 주로 **kwrags 사용, 딕셔너리로 받음
    매개변수 기본값(parameter default value) : 함수를 정의할때 기본값 지정, 함수를 사용할때 인자를 보내지않는다면 미리 지정한 기본값을 사용

parameter 순서(feat. keyword only argument)

함수를 정의할 때 매개변수를 어떤 형식과 순서로 지정하느냐에 따라서 함수를 호출할 때 입력하는 인자값이 달라질 수 있다. 그리고 파이썬에서 매개변수를 입력하는 순서는 정해져 있다.

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

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

  • Defalt value parameter
    함수가 호출될때 파라미터에 인자를 받아 넘겨준다.

  • non-defalut value parameter
    함수가 호출될때 파라미터에 인자를 받아 넘겨줄 수 도 있으며, 인자를 넘겨주지 않아도 keywordname=value 형식으로 선언되어 있기 때문에 지정한 value 를 넘겨줄 수 있다.

return Answer(Q1)

위치 인수가 parameter에 할당될 때 왼쪽에서 오른쪽 순서의 방향성이 존재한다.
따라서 default value parameter를 non-default value parameter앞에 정의하고 argument를 1개만 전달하면 해당 argument는 default value parameter에 할당되므로 non-default value parameter는 할당받는 값이 없어서 오류를 발생하게 된다.

Q2.위치 인수(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)

=========================================================
#error
File "/Users/sh_awtylol4/Desktop/pythonwork/pypyp.py", line 6, in <module>
    func_param_with_var_args("정우성", "01012341234", "seoul", 20)
TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'
sh_awtylol4@gimsuhun-ui-MacBookAir pythonwork % 

*args 와 age 의 위치가 바뀌었기 때문에 에러가 뜬다.

return Answer(Q2)

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("정우성", "01012341234", "seoul", 20)

=======================================================
name=정우성
args=('seoul', 20)
age=01012341234

Q3.가변 키워드 인수 (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")

=========================================================
# error
SyntaxError: invalid syntax

가변인수 뒤에 address가 위치해 있기 때문에 error가 발생한다.

return Answer(Q3)

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

Q4.위치 인수와 키워드 가변 키워드 인수 (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")
================================================
# error
SyntaxError: invalid syntax

위치 인수인 age를 첫번째 매개변수로 이동시켜주고 kwargs**를 맨 뒤로 옮겨준다. adderss는 키워드 전용 인수이므로 가변 인수 뒤 가변 키워드 인수 앞에 위치한다.

return Answer(Q4)

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

mixed_params(20, "정우성", "01012341234", "male" ,mobile="01012341234", address="seoul")

=======================================================
age=20
name=정우성
args=('01012341234', 'male')
address=seoul
kwargs={'mobile': '01012341234'}

출처

profile
포기하는 그 순간이 바로 시합종료예요...

0개의 댓글