일상코딩/노트

Python Functions(1) [함수의 구조]

코딩애벌레 2024. 1. 21. 19:17

함수(Functions)

1회용이 아닌 어떠한 특정 작업을 수행하기 위한 재사용 가능한 코드 묶음이다.

  • 함수를 정의하고 사용하면서 다른 코드와 중복과 겹치는 것을 방지하기 위함
  • 코드를 만들어 두기만 하면 재사용을 할 수 있고, 코드의 가독성과 추후 코드 유지보수하기에 유리함

 

내장 함수(Built-in function)

 

말 그대로 파이썬 안에 내장된 기본 옵션을 뜻하며 파이썬이 제공하는 기본 함수라고 생각하면 된다. 반대의 의미를 외장함수로 쓰는 원문도 있으나, 정확히 정의된 바가 없기 때문에 반대의 의미는 일반 함수이다. 특징으로는 별도의 import 없이 바로 사용이 가능하며 예시로는 가장 많이 쓰는 print()가 있다. 실제로는 print() 함수 안에 많은 코드가 숨어있겠지만, 간단하게 입력하여 내장된 기능을 사용하는 것이다. 다른 예시로는 절대값을 만드는 함수 abs가 있다. 

result_abs = abs(-3)
print(result_abs)	#3

위에 간단한 코드안에 내장 함수를 2개나 사용한 것이다.

 

함수의 구조

 

'function_name(arguments)' 의 형식을 따르는데, '함수명(인자)'의 틀을 가진다. 이는 함수를 실행하기 위해 형식을 맞추어 해당 코드 함수를 실행하는 것이다. 위의 경우 'abs'와 'print'가 함수명, '-3'과 'result_abs'가 인자라고 생각하면 된다.

합을 구하는 함수를 만들었고, 해당하는 요소에 대한 이름들이다

 

  • Parameter : (= 매개변수를) 의미하며 input값의 x를 담당한다. function body에서 사용되는 변수들이다.
  • Document string : 함수에 대한 가이드 및 예시를 넣어줄 수 있다. 없어도 되는 부분이지만 어려운 함수를 정의했을 때는 다른 개발자들도 알아보기 쉽게 ''' ''' 통해 넣어줄 수 있다.
  • Return value : 함수식에서 반환되는 값을 의미한다. 비워둘 수 없는 칸이며 위의 식처럼 바로 식을 반환할 수 도 있고, result = parameter1 + parameter2 로 result 에 할당한 다음 return result를 써주어도 된다. 나는 간단한 식이 아닌이상 result로 넘겨주는 것이 깔끔하다고 생각하는 편이다.
  • Function body : 함수의 몸통 부분을 의미하며 함수에 대한 설명 + 함수 + return value를 통틀어서 function body라고 한다.
함수의 정의

 

: 함수를 만드는 것이며 def 키워드로 시작, 매개변수 이후 : 을 꼭 붙여주어야 한다. 

함수 식에서 정의, 이름, 변수, 호출, 인자 에 해당하는 부분을 나타냈다.

 

여기서 주의할점은 매개변수와 인자는 다른 요소이다. 

parameter(=매개변수)는 함수를 정의할 때, 함수가 '받을 값'을 나타낸 변수이고

argument(=인자)는 함수를 호출할 때, 실제로 '전달되는 값'을 나타낸 것이다.


인자의 종류

 

: 인자에는 총 5가지가 있으며 위치인자, 기본인자, 키워드 인자, 가변인자 안에 임의의 인자, 임의의 키워드 인자가 있다. 정말 많아서 복잡하지만 차근차근 따라오면 이해하기 쉽다. 이름도 반복이니 헷갈리지말고 해보자.

 

1. Positional Arguments (위치인자)

: 함수를 호출할 때 인자의 위치에 따라 전달되는 인자이다. 위치인자는 함수 호출 시 반드시 매개변수와 동일한 갯수의 인자 갯수를 전달해야 한다.

인자의 순서도 중요하다. 위치 순서대로 대입되는 것이기 때문에 4번째같은 실수는 안하길 바란다.

 

위치 인자는 고집이 있기 때문에 위치를 옮기려 하지 않고 갯수도 무조건 맞춰주어야 한다. 순서도 잘못쓰면 고쳐주지도 않고 그냥 주는대로 받아서 출력하는 성격이 있다.

 

 

2. Default Argument Values (기본 인자 값)

: 함수를 정의할 때, 매개변수에 기본값을 할당한다. 이는 함수 호출하면서 인자를 전달하지 않으면 기본값이 인자의 역할을 하게 된다. 기본 인자 값은 예비의 느낌이며, 실제로 대입되는 인자가 있다면 무시된다.

매개변수 위치에 '매개변수 = 값'  : 함수의 기본값을 설정. 위치인자를 받을 것이 있다면 그 뒤로 위치시킨다.

기본 인자 값을 할당하는 매개변수 age의 위치가 중요하다.

 

주의할 점이 있는데 기본 인자 값은 일반 위치인자가 들어오는 매개변수의 자리보다 뒤에 위치해야만 한다. 만약 기본 인자 값이 앞으로 올 수 있다면, 기본 인자 값을 할당한 것을 사용 하기 위해 인자를 하나 덜 집어 넣을텐데, 그러면 해당 인자가 기본인자를 덮어씔 정보인지, 위지인자인지 알 수 없기 때문이다.

 

 

3. Keyword Arguments (키워드 인자)

: 함수를 호출할 때 인자의 이름과 함께 값을 전달하는 인자이며 매개변수와 인자의 위치를 일치 시키지 않고, 특정 매개변수에 값을 할당할 수 있는 방법이다. 따라서 인자의 순서는 중요하지 않고 매개변수의 이름을 인자의 이름에 명시하여 값을 전달하는 방법이다. 

인자 위치에 '매개변수와 같은 요소 = 값' : 위치인자 뒤에 위치하며 인자에 값을 할당하면 된다. 모두 할당한다면 순서는 무시할 수 있다.

기본 인자값과 유사하게 키워드 인자 역시 순서가 중요하다

 

키워드 인자의 순서는 위치 인자 뒤에만 올 수 있다. 하지만 키워드 인자를 모두 할당한다면 섞여도 무관하다. 키워드 인자 이후 위치 인자는 실행조차 하지 않는다고 생각하면 편하다. 

 

4. Arbitrary Argument Lists (임의의 인자 목록)

: 정해지지 않은 개수의 인자를 처리할 때 사용하는 인자이다. 우리가 가장 흔히 사용하는 내장 함수에서 print( )를 알 것인데, 사용해볼 때 print( A, B, C) 이나 print( 1, 23, 15, 4) 등을 해본적 있을 것인데, 이는 이미 괄호 안을 임의의 인자로 설계해놨기 때문이다. 이처럼 안에 몇개의 인자가 들어갈 지 모르는 함수를 정의할 때 사용한다. 

매개변수 위치에 요소이름 앞 ' * ' 을 붙여 사용하며, 들어올 인자들을 tuple로 처리한다.

어렵게 위치인자와 임의의 인자를 같이 섞어서도 사용이 가능하다. 따라서 일반적으로 순서를 지키는 것이 좋을 것 같다.

 

5. Arbitrary Keyword Argument Lists (임의의 키워드 인자 목록)

:정해지지 않은 개수의 키워드 인자를 처리하는 인자이며 키워드 인자가 몇개 들어갈 지 모르는 상태로 사용하는 방식이다. 사실 실적용을 해본적이 없어서 어떻게 쓰이는지 모르겠으나 이 방법도 다른방법과 같이 섞어서 사용이 가능하다

매개변수 위치에 요소이름 앞 ' ** ' 을 붙여 사용하며, 들어올 인자들을 dictionary로 받고 dict로 처리한다.

이 역시 위치인자, 키워드인자, 임의의 인자 등 순서를 맞추어야 가시성과 제대로된 적용이 가능할 것 같다.

 

위치 인자 - > 기본 인자 -> 임의의 인자 - > 임의의 키워드 인자

 

위에서 여러번 언급했듯 함수 인자(매개변수 포함)를 작성할 때 권장하는 순서가 있다. 호출 시 인자를 전달하는 과정에서 혼란이 올 수 있기 때문에 규칙을 지키는 것이 좋다. 하지만 절대적인 규칙은 아니며 상황에 따라 바뀔 수 있다. 가장 중요한 것은 위치 인자는 항상 앞에 오는 것이 좋다만 알면 충분할 것 같다.

 

함수의 가장 기본적인 요소들만 살펴보았는데, 호출과 정의하는 부분이라 시작 및 중요한 부분이니 정확하게 알고 가면 좋을 것 같다.

728x90