-> parameter 로 값을 받아 오는데에는 지정된 형식에 따라 순서대로 받아옴.
순서없이 무작위로 parameter 를 설정하면 "어떤 parameter 에 어떤 값을 받아와야하는지" 컴퓨터는 판단할 수 없기때문.
--> 당연한 얘기지만 순서가 꼬이면 TypeError 가 발생함
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)
-> positional 과 keyword-only 의 순서가 잘못된 오류
--> age
를 *args
앞으로 옮겨도 되고(20 도 010 앞으로 옮겨야 함)
---> age
를 age="20"
이라는 keyword 속성으로 변경해도 됨(이 경우는 아래의 input값을 수정해야 하기때문에 상황에 맞는 방법을 택하자) (두번째 방법에서 input
값을 지우지 않아서 args
값에 20
이 출력되었다)
args
는 정해지지 않은 수의 tuple 자료형 (일반)파라미터를 받는다.
(Variable Length Positional Arguments)
kwargs
는 정해지지 않은 수의 dict 자료형 keyword parameter를 받는다.
(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")
-> 이번엔 var-keyword 가 keyword 보다 앞에온 상태
--> "address=0"
을 "**kwargs"
앞으로 놓으면 해결(당연히 아래의 input 값 위치도 변경)
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")
-> Keyword-Only 인자가 Var Length Keyword 보다 뒤에 있는 상태
-> Position 인자인 "age"
역시 Keyword와 Keyword-Only 뒤에 있는 상태
--> 올바른 위치를 잡아줌으로써 에러없는 결과를 도출
len()
로 알아낼 수 있음def add_first_and_last_elements(my_list):
# 이 함수를 구현해주세요.
if len(my_list) == 0:
return (0)
else:
return (my_list[0]) + (my_list[-1])
return (my_list[0]) + (my_list[-1])
if len(my_list) == 0:
return (0)
-> 일단 지문을 읽는대로 code를 써내려 가면서 생긴 오류
-> list index out of range Error 출력
--> 3시간 고민하다가 첫번째 문장을 if에 넣어볼까라는 생각에 도달함
return (add_first_and_last_elements[0]) + (add_first_and_last_elements[-1])
if len(add_first_and_last_elements) == 0:
return (0)
-> 최초의 노답 코드 상태. 이건 인수, 인자, 변수들의 위치적 의미와 위치에 따른 역할에 대한 기본 개념이 모호했기에 발생한 오류.
-> 개념자체가 모호하니까 질문도 애매모호 해짐.
(Q. add_는 왜 return 으로 발동하지 않는가? add_(my_list) 에서 my_list 는 무슨 역할을 하고 후속 코드의 어느 위치에서 사용할 수 있는가?)