파이썬으로 크롤링 해보고 나서 바로 Django를 공부했는데 Django를 하면서 되게 불편했던 부분이 있다.
장고의 기능이 불편하다는 것이 아니라 내 심적인 불편함 그것은 바로 "*" 요놈이다!!
앞에서도 계속 이야기했지만 c++에서 가장 짜증나는 부분 바로 pointer!!
인줄 알았는데 다행이도 파이썬에서는 pointer같은 어렵고 난해한 부분은 아니었다.
default value parameter
and non-default value parameter
def func_param_with_default(age, name="jayko"):
print("name=",end=""), print(name)
print("age=",end=""), print(age)
func_param_with_default(27, "준영")
func_param_with_default(27)
def func_param_with_default(name="jayko", age):
print("name=",end=""), print(name)
print("age=",end=""), print(age)
func_param_with_default(27, "준영")
func_param_with_default(27)
위 내용에 대한 이해
함수를 호출 할 때 name값을 주어도 되고 안주어도 되는 값이다.
왜냐? default value parameter이기 때문이다.
그렇다면 우리가 27 이라는 변수를 하나만 주어주게 되면 이것이
name은 주지 않고 age값을 준 것인지?
아니면
name에 27이라는 값을 주고 age는 주지 않은 Human error인지?
기계는 알 수 없다!!
따라서 non-default argument 가 default argument앞에 와야 함
def positional_arguments(name, age, sex):
positional_arguments(jayko, 27, male)
jayko -> name
27 -> age
male -> sex
def positional_arguments(name, *args):
positional_arguments(jayko, 27, male)
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)
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("정우성", 20, "01012341234", "seoul")
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")
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")
def mixed_params(name="아이유", *args, age, 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")
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")
코드 분석
20은 age의 값으로 (age는 positional arguments의 non-default value parameter)
"정우성"은 name 값으로(name는 positional arguments의 default value parameter)
"01012341234", "male"는 agrs의 값으로(agrs는 Variable length arguments)
address="seoul"은 address 값으로(address는 Non-Default Keyword-Only Arguments)
*Keyword-Only Arguments는 오로지 keyword로만 받는 인자
mobile="01012341234"는 kwargs의 값으로(kwargs는 Variable length keyword arguments)
위코드의 과제로 주어주지 않았다면, 계속 모르고 지나갔을 내용이었을 수도 있다
하지만 Django, Python을 하는데 있어 꼭 알아야 할 내용이었다
모르는 부분에 대해 고민하고 알아가면서 조금씩 성장하자!!
느리더라도 정확하게 알고 간다👊
21.08.03 위코드 1주차 화요일