-> 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 는 무슨 역할을 하고 후속 코드의 어느 위치에서 사용할 수 있는가?)