[Python] Function Parameters

eslim·2020년 8월 19일
1

Python

목록 보기
8/12
post-thumbnail

Function Parameters

  • 순서대로 값이 parameter로 함수에 전해지는 기본적인 형태
def love_you(my_name, your_name):
	print("f{my_name} love {your_name}")
    
love_you("정우성", "아이유")

keyword Arguments

  • 순서와 상관없이 parameter 이름으로 맞추어서 값을 전해주는 방법
  • parameter의 순서와 상관없음
def love_you(my_name, your_name):
	print("f{my_name} love {your_name}")
    
love_you(my_name="정우성", your_name="아이유")

Mixing positional arguments and keyword arguments

  • 순서대로 parameter 값을 전해주는 positional arguments와 keyword arguments를 혼용하여 사용하는것도 가능하다
def love_you(my_name, your_name):
	print("f{my_name} love {your_name}")
    
love_you(my_name, your_name="아이유")

Default value parameter

  • 함수의 parameter에 default 값을 정의해 줄 수 있다.
  • 값이 넘겨지 않은 경우 default 값이 자동으로 넘겨지게 된다.
def love_you(my_name, your_name="아이유"):
	print("f{my_name} love {your_name}")
    
love_you("정우성")

default 값이 정의된 parameter가 default 값이 정의되지 않은 parameter 보다 먼저 위치해 있으면 안된다.

Assignment1

이번 과제는 programming 과제가 아니라 개념을 이해하고 설명하는 과제 입니다.
함수를 정의 할때 default value parameter를 non-default value parameter 앞에 정의 하면 안된다고 배웠습니다.
왜 안돼야만 하는지 생각해보시고 블로깅 하여 채널에 공유해 주세요.

Answer

  • SyntaxError: non-default argument follows default argument 이라는 오류가 발생한다. 함수를 호출할 때 값을 주는 순서 대로 기본값 인자에 값이 할당되며,
    parameter의 우선순위는
    1. 일반 인자
    2. default 일반 인자
    3. 가변 인자
    4. Keyword-Only 인자
    5. 키워드 가변 인자
    다음과 같고, 이 순서를 지키지 않으면, 위와 같은 오류가 발생한다.
    파라미터를 정의하는 순서 없이 생성 시 함수가 어떤 파라미터에 어떤 값을 받아야 할지 혼란이 올 수 있다.

Assignment2

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

Answer

  • TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'
  • 수정 후 코드
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", age=20)
  • 결과 출력

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

Assignment3

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

Answer

  • 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")
  • 출력

    name=정우성
    age=20
    kwargs={'mobile': '01012341234'}
    address=seoul

Assignment4

위치 인수와 키워드 가변 키워드 인수 (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")

Answer

  • SyntaxError: invalid syntax
  • 수정 후 코드
def mixed_params(age, name="아이유", *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")
  • 출력

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

0개의 댓글