[PYTHON] Function

Minjeong Bak·2021년 10월 10일
0

PYTHON/Django

목록 보기
3/14
post-thumbnail

Function

개념

일정한 작업을 수행하는 코드블럭

사용 이유

  • 반복되어 계속 사용되는 코드들을 함수로 정의하여 효과적으로 사용하기 위해 사용
  • 함수로 정리 하여 해서 코드의 가독성을 높이기 위해 사용

문법

def 함수명(parameter):
    문장1
    문장2
    ...
    문장N
    [return 리턴값]
  • return과 parameter은 필요에 의해 넣거나 빼면 되며 필수가 아닌 선택이다.
  • return은 함수에서 해당 함수를 호출한 주체(invoker)에게 결과값(output)을 보내주는 것

Function Parameters

Positional arguments

Keyword arguments

Mixing

✓ 혼용해서 사용할 때는 Positional arguments의 순서를 지켜주어야 에러가 나지 않는다.

Default

✓ default 값이 정의되지 않은 parameter보다 먼저 위치해 있으면 에러 발생

과제

함수를 정의 할때 default value parameter를 non-default value parameter 앞에 정의 하면 안 되는 이유

non-default value parameter일 경우 순서대로 값을 입력받는데 dfault value parameter가 앞에 올 경우 순서가 첫번째인지 두번째인지 정확하게 판단하기 어렵기 때문에 에러가 발생할 수 있어서

위치 인수(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("정우성", 20, "01012341234", "seoul")
  • 위치 가변 인자(*args)
    - 임의의 개수의 인자를 받는 함수를 가리켜 가변인자를 사용한다 표현한다.
    - 임의 개수의 위치 인자를 tuple 형태의 변수로 저장

순서대로 입력받아야 하는 non-default parameter가 있는 경우를 고려하여 가변 인자를 맨 뒤에 작성해보았다.

가변 키워드 인수 (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", mobile="01012341234", address="seoul")
  • 키워드 가변 인자(**kwargs)
    - 임의 개수의 키워드 인자를 dictionary 형태로 저장

뒤로 옮겼더니 실행됨.

위치 인수와 키워드 가변 키워드 인수 (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("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")
  • 순서
    일반 인수 >> 일반 Default 인수 >> 가변 인수 (*args) >> keyword-Only-Arguments >> 키워드 인수 (**kwargs) 순서

    자꾸 오류가 나서 구글링해봤더니 keyword only arguments가 키워드 가변 인자 앞에 위치해야 한다고 해서 위치를 옮겨봤지만 실행되지 않았다. replit에서는 실행되지만 python IDLE에선 실행되지 않는다. 잘모르겠다.

0개의 댓글