Python - Function

Enjoywater·2020년 8월 19일
1

TIL

목록 보기
2/33
post-thumbnail

Function Parameter

Parameter Default Value

함수에서 parameter를 지정할 때 기본 값으로 미리 정하고 작성할 수 있다.

def func(a, b = 10):
    print(a * b)
    
 func(10)
 # 결과값 -> 100
 
 func(10, 2)
 # 결과값 -> 20

기본으로 정해진 값으로도 실행이 가능하고 새로운 값을 넣어서도 실행이 가능하다.

하지만 함수를 작성할 때 default parameter는 함수의 맨 오른쪽에만 위치 할 수 있다.

만약 parameter가 3개라면

def func(a, b = 10, c):
    print(a + b + c)
    
 func(5, 6)
 # Error

실행할 때 입력한 값들이 어디로 들어가야하는지 정확하지 않기 때문이다.



Variable Length Arguments

함수를 만들때 인수가 정해지지 않은 함수도 작성 할 수 있다.

def func(*args):
    print(args)
    
func(1,2,3,4)
# 결과값 -> (1,2,3,4)

func(1,2,3)
# 결과값 -> (1,2,3)

def func(*args):
    print(*args)
    
func(1,2,3,4)
# 결과값 -> 1 2 3 4

위처럼 자유롭게 인수의 수를 변경하면서 함수를 호출 할 수 있다.

하지만 위의 dafault value와 같이 parameter의 맨 오른쪽에 위치해야한다.

아래 코드와 같이 맨 오른쪽이 아닌 다른 곳에 위치하게 되면 에러가 발생한다.

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)
# 결과값 -> Error

parameter의 위치를 변경하여 에러를 해결할 수 있다.

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")
# 결과값 -> name=정우성
#         args=('01012341234', 'seoul')
#         age=20


Variable Length Keyword Arguments

Variable Length Arguments와 비슷하지만 복수의 키워드를 입력받아서 함수를 호출 할 수 있다.

def func(**kwargs):
  print(kwargs)
  
func(a = 10, b = 20)
# 결과값 -> {'a': 10, 'b': 20}

Variable Length Keyword Arguments도 parameter의 맨 오른쪽에 위치해야 한다.

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")
# 결과값 -> Error

이 코드 또한

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

parameter와 arguments의 위치를 변경해서 에러를 고칠 수 있다.



위 방식들을 함께 사용 할 경우

  • Parameter Default Value + Variable Length Arguments
def func(age, name = "Enjoy", *args):
  print(age)
  print(name)
  print(*args)
  
func(10, "Water", 20, 30)
# 결과값 -> 10
#         Water
#         20 30
          
# print(args)로 변경하면

# 결과값 -> 10
#         Water
#         (20, 30) 으로 출력된다.

Parameter Default Value, Variable Length Arguments의 위치를 변경시켜도 작동은 되지만 default value를 변경하여 호출 할 수 없다.
만약 순서를 바꿔서 호출하려 한다면 parameter명에 맞게 입력 후 호출해야한다.

def func(age,  *args, name = "Enjoy"):
  print(age)
  print(*args)
  print(name)
  
func(10,  20, "Water")

# 결과값 -> 10
#         20, "Water"
#         Enjoy

def func(age,  *args, name = "Enjoy"):
  print(age)
  print(*args)
  print(name)
  
func(10,  20, name = "Water")
# 결과값 -> 10
#         20
#         Water

  • Parameter Default Value + Variable Length Keyword Arguments
def func2(name = "Enjoy", **kwargs):
  print(name, kwargs)
  
func2("Water", a = 10, b = 20)
# 결과값 -> Water {'a': 10, 'b': 20}

# print(**kwargs)로 변경하면 Error가 발생한다.

Variable Length Keyword Arguments를 맨 오른쪽에 위치시킨다.
Default Value를 입력하지 않아도 정해진 값으로 출력된다.


  • Variable Length Arguments + Variable Length Keyword Arguments
def func(*args ,**kwargs):
  print(args)
  print(kwargs)
  
func(1,2,3, a = 10, b = 20)
# 결과값 -> (1, 2, 3)
#         {'a': 10, 'b': 20}
#         
# print(*args)로 변경하면
# 결과값 -> 1 2 3
#         {'a': 10, 'b': 20}
#          
# print(**kwargs)로 변경하면 Error

Variable Length Arguments 다음에 Variable Length Keyword Arguments가 올 수 있도록 작성한다.


  • 3가지 모두 함께 사용 할 경우
def func(name = "Enjoy", *args, **kwargs):
    print(name, args, kwargs)
    
 func(1,2,3, a = 10)
 # 결과값 -> Error

이렇게 세가지로만 나열해서는 함수를 호출할 수 없다.


사진의 내용과 같이 다른 인자를 추가해서 정확한 순서를 맞춰야한다.

def func(Positional Arguments,
         Default Arguments, 
         Variable Length Arguments, 
         Keyword Arguments, 
         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, name="아이유", *args, address, **kwargs):
    print("age=",end=""), print(age)
    print("name=",end=""), print(name)
    print("args=",end=""), print(args)
    print("address=",end=""), print(address)
    print("kwargs=",end=""), print(kwargs)


mixed_params(20, "정우성", "01012341234", "male", address="seoul", mobile="01012341234")

# 결과값 -> age=20
#         name=정우성
#         args=('01012341234', 'male')
#         address=seoul
#         kwargs={'mobile': '01012341234'}

위 코드처럼 결과값이 나오게된다.

profile
블로그 이전 👉🏻 enjoywater.tistory.com

0개의 댓글