Function Parameters

이찬영·2021년 12월 2일
0

파이썬 기초

목록 보기
1/1
post-thumbnail

Assignment.1 default value parameter를 non-default value parameter 앞에 정의하면 안되는 이유

함수를 정의 할때 default value parameter를 non-default value parameter 앞에 정의 하면 안되는 이유가 무엇인지 생각해보자!

→ 답:Arguments의 우선순위가 존재한다!

  • default value parameter를 사용하면 인수에 값이 전달되지 않아도 기본적으로 할당된 데이터를 사용하게 되어 있으나 이를 앞부분에 위치시키게 되면 뒤쪽으로 이동한 non-default parameter에 값이 할당되지 않는 상황이 생길 가능성이 있다.

  • 따라서 이런 위험의 발생가능성을 없애기 위해서 문법 체크 레벨에서 오류(Error)로 판단하는 것 같다.
  • Assignment.2 함수 수정 및 에러 파악 - 위치 인수와 가변 인수

    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)
  • 먼저 함수를 수정하기전 *args에 대해서 공부할 필요가 있다.

  • *args란 "가변 인자"를 위한 변수다. 간단하게 설명하자면, 함수의 인자를 몇 개 받을지 모르는 경우에 사용한다. 또한 *args에 값을 집어넣으면 튜플 형태가 된다.
  • 다시 함수로 돌아가서 *args가 가변인자를 받는 변수임으로 뒤에 age가 non-default value parameter로 인식이되어서 오류가 발생하게 된다.

    그러므로 "age=20"으로 값을 지정해주면 정상작동을 하게된다.

    Assignment. 3 함수 수정 및 에러 파악 - 가변 키워드 인수

    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)
  • **kawargs에 대해서 공부해보자

  • **kawargs는 *args와 비슷하지만 약간 다름, 딕셔너리 형태로 저장하게된다.
  • 다시 함수로 돌아가서 positional과 keyword 인수의 관계 때문에 문제가 발생하게된다.

    그러므로 address와 kwargs 의 위치를 바꿔줌으로써 해결 가능하다.

    Assignment. 4 함수 수정 및 에러 파악 - 위치 인수와 가변 키워드 인수

    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")
    #함수 정의부의 **kwargs를 가리키며 문법 에러라고 알림

    그래서 수정을 positional에 맞게 하였습니다.

    def mixed_params(age, address, name="아이유", *args, **kwargs):	#참고한 파이썬 argument order를 참고
        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)

    ※정리※

  • 함수의 인수에는 정렬 기준 존재

  • def func( 위치 인수 - 디폴트 값을 지정한 인수 - 가변 길이 인수 - 무조건 키워드를 사용하는 인수 - 가변 길이 키워드 인수) 순서로 정렬 기준이 있다.
  • profile
    개발을 탐구하자

    0개의 댓글