[TIL] 파이썬 - func(parameters, default value, arguments)

sayxyoung·2021년 1월 13일
0

python/syntax

목록 보기
34/39

1. 기본(position arguments)

def func(a, b, c):
    print(a, b, c)
    
func(1, 2, 3)

함수에는 전달값이 있는경우도 있고, 없는경우도 있다. 만약 전달값이 있다면,
함수를 실행할 때 함수의 매개변수 수와 같은 인수를 넣어줘야 한다.
순서대로 들어감!

2. 기본2(keyword arguments)

def func(a, b, c):
    print(a, b, c)
 
x = func(a=1, b=2, c=3)
y = func(c=4, a=1, b=3)

순서 상관없이 이름을 지정해서 값을 넣어줄 수 있다.
이렇게 매칭시켜주면 위치에 관계없이 원하는 값에 들어감!

3. 1번 2번 짬뽕

def func(a, b, c):
    print(a, b, c)
 
x = func(1, 2, c=3)
y = func(1, b=2, c=3)
z = func(b=2, c=3, 1)

x, y는 출력 잘됨
그런데 z는 문법에러가 발생한다.
내용을 보면
SyntaxError: positional argument follows keyword argument
위치인수가 키워드인수 뒤에 왔다고 한다.
전달값인 1이 a의 인수인지, 3번째 매개변수 c의 인수인지 알 수가 없기 때문이다.
이렇게 섞어사용할 때에는 위치인수 > 키워드인수 순서대로 사용해야한다.

4. default value

def func(a=1, b=2, c=3):
    print(a, b, c)

x = func()
y = func(3,2,1)
z = func(3,2)

함수를 선언할 때부터 매개변수 값을 지정해주는 방식이 있다.
함수를 호출 할 때 인수값을 넣으면?
덮어쓰기됨!

여기서 디폴트인수랑 키워드인수랑 구분잘해야함
디폴트인수는 함수선언할 때 값을 지정해주는 것이고
키워드인수는 함수호출할 때 값을 지정해주는 것임!

5. non-default, default value

매개변수에 기본값(맨 위 1번)을 non-default인수라고 한다.

def func(a, b=2, c=3):
    print(a, b, c)

y = func(3,2,1)
z = func(3,2)

이러면 에러가 발생하지 않지만

def func(a=1, b=2, c):
    print(a, b, c)

y = func(3,2,1)
z = func(3,2)

다음과 같은 문법 에러가 발생한다.
SyntaxError: non-default argument follows default argument

같이 사용한다면
반드시 non-default 인수, 디폴트 인수 순서로 정의해야한다.
이유는 논디폴트값은 필수적으로 필요한 반면, 디폴트값은 필수적이지 않기 때문이다.
다사밀해서 디폴트값은 줘도 되고 안줘도 되지만, 논디폴트값은 반드시 줘야한다.
이 관점에서 예를들면, 함수를 정의할 때 폴트값을 먼저 지정했다고하자,
그리고 함수호출에서 인수를 지정할 때
맨 처음 준 인수가 디폴트에 덮어쓰라는 건지, 뒤에 논디폴트 값이라는건지 알 수 가 없다.


출처 : https://getkt.com/blog/python-keyword-only-arguments/

문제 1

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")
  1. 논디폴트 > 위치인수 튜플 순서로 함수선언

문제 2

def func_param_with_kwargs(name, age, address=0, **kwargs):
    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")
  1. 논디폴트 > 디폴트 > 위치인스 튜플 순으로 함수선언
  2. 함수 호출시에는 변동없음(키워드 인수를 사용함)

문제 3

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")
  1. 논디폴트 > 디폴트 > *args > 키워드인수 > **kwargs
profile
기억보단 기록하자

0개의 댓글