[Python] 함수 파라미터(Function Parameter)

이승연·2020년 11월 24일
0

Python

목록 보기
4/6
post-thumbnail

Function Parameters

  • 함수 이름 옆에 있는 괄호 안에 있는게 function parameter이다. 파라미터를 순서대로 넣는 경우 positional argument라 한다.
def my_name(last_name, first_name):
	print("my name is", last_name, first_name)
   
my_name("Lee", "lyla")

Keyword arguments

  • 파라미터를 순서대로 파라미터명과 함께 넣어주는 방법도 있다. 이렇게 되면 가독성도 높아지고 실수를 줄일 수 있다. 물론, 순서가 섞여도 괜찮다.
def my_name(last_name, first_name):
	print("my name is", last_name, first_name)
   
my_name(last_name = "Lee", first_name = "lyla")

두개를 섞으면?

  • 혼용사용 가능! 하지만 positional argument는 순서를 지켜줘야한다. 그렇지 않으면 syntax error!
def my_name(last_name, first_name):
	print("my name is", last_name, first_name)
   
my_name(last_name = "Lee","lyla")

함수 정의할 때 미리 파라미터를 정의해주면? (Parameter Default Value)

  • 가능! 물론 실행할 때 다른 값으로 변경하는 것도 가능. 단, deafult value가 non-default value보다 먼저 위치하면 syntax error가 나므로 꼭 그 다음에!
def my_name(first_name, last_name = "Lee"):
	print("my name is", last_name, first_name)
   
my_name("lyla")

파라미터를 얼마나 넣을지, 무엇을 넣을지 정해지지 않은 상태에서도 함수 정의가 가능할까?

  • 놀랍게도 가능!

Non-keyworded variable length of arguments

  • 파라미터로 *args를 넣으면 argument로 넣어진 값들을 tuple로 리턴한다. Positional이지만 갯수에 상관없이 값을 마구 넣을 수 있다고 생각하면 됨.

Keyworded variable length of arguments

  • 파라미터로 **kwargs를 넣으면 argument로 넣어진 키와 값들을 dictionary로 리턴한다. 이것도 갯수 상관 없다.

Mixing everything... 섞었을 때 따라야하는 규칙 정리

  • regular positional arguments -> default arguments -> *args -> keyword arguments -> **kwargs

과제

  1. 함수를 정의 할때 default value parameter를 non-default value parameter 앞에 정의 하면 안된다고 배웠습니다. 왜 안될까요?
  • Non-default value parameter는 기본적으로 argument를 positional argument 혹은 keyword argument으로 설정한다. 이 말은 만약 positional argument로 argument가 생성되었다면 함수의 파라미터 순서가 매우 중요해진다는 뜻이다. Keyword argument는 직접적으로 파라미터값을 생성해주기 때문에 상관이 없지만 positional argument가 생성되었을 때에는 순서에 혼동을 막기 위해 non-default value를 무조건 앞에 써준다.
  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)
  • 에러 메세지:
TypeError: func_param_with_var_args() missing 1 required keyword-only argument: 'age'
  • 해결방법:
func_param_with_var_args("정우성", "01012341234", "seoul", 20)

--> age argument가 꼭 들어가야 하는데 앞에 있는 *args 때문에 argument가 몇개 들어올지 모르니 age를 keyword argument로 만들어준다.

func_param_with_var_args("정우성", "01012341234", "seoul", age = 20)
  • 출력결과
  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")
  • 에러 메세지:
  File "/home/lyla0427/바탕화면/practice.py", line 1
    def func_param_with_kwargs(name, age, **kwargs, address=0):
                                                    ^
SyntaxError: invalid syntax
  • 해결방법:
def func_param_with_kwargs(name, age, **kwargs, address=0):

--> address가 들어가야 하는데 앞에 있는 *kwargs 때문에 argument가 몇개 들어올지 모르니 address parameter를 앞으로 빼준다.

def func_param_with_kwargs(name, age, address=0, **kwargs):
  • 출력결과
  1. 위치 인수와 키워드 가변 키워드 인수 (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=""), prinrm t(kwargs)
    print("address=",end=""), print(address)
mixed_params(20, "정우성", "01012341234", "male" ,mobile="01012341234", address="seoul")
  • 에러 메세지:
File "/home/lyla0427/바탕화면/practice.py", line 1
    def mixed_params(name="아이유", *args, age, **kwargs, address):
                                                       ^
SyntaxError: invalid syntax
  • 해결방법:
    --> 우선 파라미터의 순서를 positional, default, 그리고 complex function 순으로 바꿔준다. 그 다음, Argument에서 address인 keyword arguments를 positional로 바꿔주고 올바른 자리에 놓아준다.
def mixed_params(age, address, name="아이유", *args, **kwargs):
    print("name=",end=""), print(name)
    print("args=",end=""), print(args)
    print("age=",end=""), print(age)
    print("kwargs=",end=""), p![](https://velog.velcdn.com/images%2Fsylee0427%2Fpost%2Fa63dd062-c7c9-49c8-b8ac-17c1db25cfaa%2F%EC%8A%A4%ED%81%AC%EB%A6%B0%EC%83%B7%2C%202020-11-24%2019-59-00.png)rint(kwargs)
    print("address=",end=""), print(address)
mixed_params(20, "seoul", "정우성", "01012341234", "male" ,mobile="01012341234")
  • 출력결과

0개의 댓글