파이썬 Function Parameters 이해하기

김민정·2022년 4월 27일
0

위코드 과제

목록 보기
4/11
  1. 함수를 정의할때 default value parameter를 non-default value parameter 앞에 정의하면 왜 안됩니까?

default value parameter가 무엇입니까?
-함수에는 parameter를 붙일 수 있습니다. 이 paramters는 값을 가지지 않기도 하지만 때로는 기본 값을 가지기도 합니다.
non-default value parameter가 무엇입니까? - 기본값을 가지지 않는 parameter를 의미합니다.

쉽게 말해서 파이썬 함수의 정해진 규칙이기 때문입니다. 함수의 parameter는 non-default paramter, default paramter args, **kwargs 순으로 parameter를 인식합니다. 이때 만약에 Paramter의 순서가 defualt paramater부터 정의된다면 아래 함수 식에서 어떠한 값이 non-default값인지 default 값인지 함수는 알 수 없기 때문에 오류가 난다고 합니다. 하지만 파이썬3부터는 parameter에 를 붙인다면 오류 없이 사용이 가능하다고 합니다.

예시

def fun1(a="who is you" b="True", *, x, y):
pass
fun1(x=2,y=2)
오류가 나지 않는다고 합니다.

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

def func_param_with_var_args(name,age, *args, ):
print("name=",end=""), print(name)
print("age=",end=""), print(age)
print("args=",end=""), print(args)
func_param_with_var_args("정우성", "01012341234", "seoul", 20)

네 다음과 같이 고칠수 있습니다. 위치인수와 가변인수의 개념을 활용하면 순서를 바꿔 고칠 수 있습니다.

2-1 위치인수가 무엇입니까?
-위치인수란 함수에 인수를 순서대로 넣는 방식으로 인수의 위치가 정해져 있습니다.
2-2 가변인수가 무엇입니까?
-인수의 개수가 변할 수 있다는 의미입니다. 함수를 호출할때 인수의 개수를 다양하게 바꿔가며 사용할수 있다는 의미로 2가지 형태로 나타낼 수 있습니다. 리스트 형식으로 받을 수도 있고 딕셔너리 형식으로 받을 수도 있습니다. 매개변수 앞에 *를 붙여주면 리스트 형식으로 가변인수를 받고 매개변수 앞에 **를 붙여주면 딕셔너리 형식으로 받는 것을 의미합니다.

2-3 위치인수와 가변인수는 같이 사용할 수 있습니까?
네 같이 사용할 수 있습니다. 하지만 가변인수는 항상 위치인수보다 뒤에 와야 합니다. 가변인수의 값이 정해져 있지 않기 때문에 위치인수가 가변인수 뒤에 온다면 위치인수를 인식할 수 없습니다. 가변인수의 개수는 원하는 만큼 만들어 낼 수 있기 때문입니다.

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

def func_param_with_kwargs(name, age, address=0,**kwargs):

위와 동일한 경우입니다. 가변인수를 가장 마지막에 정의해야 합니다.

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

def mixed_params(age,address,name="아이유" ,*args,**kwargs):
print("address=",end=""), print(address)
print("name=",end=""), print(name)
print("args=",end=""), print(args)
print("age=",end=""), print(age)
print("kwargs=",end=""), print(kwargs)
mixed_params(20, "seoul","정우성", "01012341234", "male" ,mobile="01012341234")

네 고칠 수 있습니다. 일단 가변인수를 리스트와 딕셔너리 순으로 맨 뒤로 옮겨줍니다. 여기서 끝난 줄 알았지만 나중에 값을 입력할때 address="seoul"이란 부분에서도 address를 없애주어야 합니다. address="seoul"이라고 할 수 있으려면 parameter에 서울이 없고 address="seoul"을 **kwargs로 인식합니다.

0개의 댓글