프로그래밍언어/python

[파이썬문법] 10. function

Albatross 2021. 12. 10. 15:25
반응형

1. Fuctions

문제해결에 필요한 명령문을 그룹화하여 독립적으로 구현한 것이다. 

이를 그룹화하여 명명할시 반복적으로 활용할 수 있다는 장점이 있으며, 인자를 변경하여 재활용할 수 있다. 

 

파이썬에는 크게 3가지 종류의 함수가 존재한다. 

1) built-in function: print(), input(), len() 등 python interpreter에 내장된 함수다.

2) library package: import modulename을 통해 불러온 module의 함수다.

3) user-defined: 위 두 함수를 적절히 조합하여 특정 기능의 구현할 수 있는 함수를 직접 정의한 것이다.

이 중 이번 게시글을 통해 user-defined function의 기본적인 구현방법을 확인해본다. 

 

1) built-in function

ex) range(), len(), keys(): 반환값이 존재하여 variable을 선언하여 이에 반환값을 할당할 수 있다. 

2) library package

ex) list.append : list module 내의 method function이다. 이는 반환값이 없고 기능만 수행한다. 

3) user defined

def funcname(par1, par2, ...):
	statement1
        statement2
        return something

함수는 다음과 같이 정의된다. 이를 정의하고 활용하는 것은 코든 내의 funcname을 호출함으로서 이뤄진다. 

함수를 정의할 때 위와 같이 parameter를 포함시켰다면 함수를 호출할 때 argument를 대입하여 이를 사용할 수 있다. 

 

C언어의 경우 main함수가 존재하여 main함수부터 compile이 실행되지만, 파이썬의 경우 구분이 없다. 

대신 파이썬의 경우 들여쓰기가 되지 않은 첫문장부터 실행되는 메커니즘을 갖고 있기 때문에 def가 어딨든 상관 없다. 

단, 적어도 함수호출이 있기 전에 함수가 정의되어 있어야 한다. 

 

또한 함수와 반복문의 차이가 기실 없다고 생각될 수 있으나, 코드 곳곳에서 활용가능한 사용자정의함수와 달리 반복문은 해당 반복문이 입력된 곳에서만 작업이 시행된다. 

 

<그림1>

 

<그림2>

만약 함수의 return값이 2개 이상이라면 이를 튜플로 묶거나 각 변수에 반환할 수 있다.

반환된 값은 t = func()와 같이 튜플에 받거나, a,b,c=func()와 같이 따로 변수에 할당받아 활용할 수 있다. 

 

2. local & global variable

1) global variable

모든 함수의 외부에서 생성되어 프로그램 전체에서 사용이 가능하다.

함수 내부에서도 이에 대해 접근이 가능하지만 수정을 할 수는 없다. 

2) local variable

함수 내부에서 생성된 변수 혹은 매개변수를 지역변수로 부른다. 이는 함수 내부에서만 사용되기에 함수 종료시 소멸된다. 그러나 return값을 통해 함수 밖으로 불러낼 수는 있다. 

 

<그림3>

만약 위 예시에서 매개변수를 곱해 도출한 result를 return값으로 불러내지 않았다면 함수종료시 소멸된다. 

또한 매개변수를 받긴했으나 지속적으로 교체되는 값을 매개변수로 받을 것이 아니라면, 위 상황에서는 그저 전역변수를 함수 내부에서 호출하여 곱한 뒤 return값으로 result를 보내도 결과는 같다. 

 

<그림4>

global s를 선언해주면 함수실행시 외부의 전역변수값을 불러들여올수 있으며 이를 함수 내부에서 수정해도 전역변수가 수정되는 것을 확인할 수 있다. 

 

<그림5>

이번 챕터 내에서 가장 중요한 것.

함수의 매개변수로 전달되는 인수가 숫자 혹은 문자열이라면 함수 내 변화가 전역변수로 이어지진 않는다.

그러나 리스트, 집합, 사전 등의 변수가 인수로 지정된 경우라면 함수 내 변화가 전역변수의 전화로 이어진다. 

 

 

3. Module

<그림6>

module을 호출하는 방법은 두가지인데, 이 때 from modulename import *를 사용시 이후 module 내 함수 사용을 더 편리하게 할 수 있다는 장점이 있다. *는 wildcard로 '모든 것'을 의미한다. 

 

보통 numpy, pandas 등의 module을 호출하여 모듈 내 함수를 사용하는데, 사용자가 별도의 module을 생성할 수도 있다. main프로그램이 저장된 폴더 내에 다양한 user-defined func가 저장된 module 파일이 함께 있다면 이를 호출하여 사용할 수 있는 것이다. 

반응형