TIL45. function parameter

Jaeyeon·2021년 3월 17일
0
post-thumbnail

✅ parameter (매개변수)? argument (인수)?

✅ default value parameter

  • 함수를 정의할 때 아래처럼 parameter에 값을 처음부터 주는 것을 의미한다.
def hello(name='원재연'):
	return name

✅ non-default value parameter

  • 함수를 정의할 때 아래처럼 parameter에 값을 주지 않는 것을 의미한다.
def hello(name):
	return name

✅ default value parameter와 non-default value parameter

두개가 섞인다면 어떻게 되는 걸까?

# 틀린 표현

def adorable(name="raon",dog):
    print(f"{dog} {name} so cute")
    
    
# 맞은 표현

def adorable(dog,name="raon"):
    print(f"{dog} {name} so cute")

이런식으로 default value parameter를 먼저 사용하면 에러가 난다.
Positional arguments는 순서를 지켜주어야 하는데 순서가 틀렸기 때문에 에러가 나는것입니다.

따라서 default value parameter가 있으면 그 parameter가 가장 나중에 와줘야 된다는 것이다.

✅ 함수를 정의 할때 default value parameter를 non-default value parameter 앞에 정의 하면 안 되는 이유에 대해 생각해보아라

def example(a, b, c = None, r = "w", d=[], *ae, **ab)
a, b : positional parameter
c = none = optional parameter
r = "w" : keyword parameter
d = []: list parameter
*ae :keyword-only
**ab: var_keyword parameter

파이썬의 파라미터를 받는 순서이다.
받는 순서의 위치가 틀릴시, 함수는 어떤 파라미터에 어떤 값을 받아야 될지 정할수 없기 때문에 오류가 난다.

✅ 위치 인수(positional arguments)와 가변 인수(variable length arguments)의 위치를 참고 자료를 통해 조사해서 어떤 에러가 발생 하는지 확인하고, 에러를 고쳐 정상적으로 출력되는 결과를 블로그에 정리해 주세요.

인수가 가변 인수일 경우에는 함수의 매개변수를 가변매개 변수로 씁니다.

가변 매개 변수는 def 함수이름(매개변수이름)으로 사용합니다.
가변 매개변수를 사용할때는 변수명은 관습상
args 로 사용합니다

def foo(*args):
    result=0
    for i in args:
        result+=i
    return result
ex=foo(1,2,3,4,5,6,7,8,9,10)
print(ex) 
#실행결과 55 나옵니다.

인수의 개수가 총 10개 였지만 가변 매개변수를 사용하면 100개를 넣어도 상관없습니다.

다음과 같이 사용하면 결과값이 튜플입니다.

def foo(*args):
    return args    
ex=foo('김규영', '서한선', 'BestFriend')    
print(ex) 
#실행결과 ('김규영', '서한선', 'BestFriend')

가변 인수는 순서가 중요합니다. 일반 매개변수, *arg 순서대로 사용해야 합니다.

def foo(relations,*args):
    print(relations,args)
ex=foo('BestFriends', '김규영', '서한선') 
#실행결과 BestFriends ('김규영', '서한선')

만약에 순서를 바꿔서 *arg, 일반 매개변수 순서로 사용할 경우

def foo(*args, relations):
    print(relations,args)
ex=foo('BestFriends', '김규영', '서한선') 
# *arg를 어디까지 적용할지 알수 없기에 실행이 안되고 다음과 같은 에러문구가 뜹니다.
# TypeError: test_func() missing 1 required keyword-only argument: 'relations'

따라서 아래와 같은 코드도

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)

이런식으로 가변 파라미터를 제일 나중에 주면 정상적으로 출력이 가능합니다.

✅ 가변 키워드 인수 (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):
    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", address="seoul", mobile="01012341234")

결과값:
name=정우성
age=20
kwargs={'mobile': '01012341234'}
address=seoul

위처럼 키워드 파라미터를 제일 나중에 설정하고 출력을 하면 정상적으로 출력이 된다.

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

위의 코드에서 파라미터의 순서를 다시 정리하여 밑의 코드로 입력을 하면 정상 출력 된것을 확인 할 수 있다.

profile
생각하는 개발자 되기

0개의 댓글