지난 글에 이어서 Python의 기본 문법 중 함수와 모듈에 대해 알아보겠습니다.
Python 함수
프로그래밍하다 보면 자주 사용하는 코드들이 있습니다. 그런데 이 코드를 매번 넣어주게 되면 전체 스크립트가 매우 복잡해지고 길어지게 됩니다. 이럴 경우 함수를 정의하여 코드를 간소화할 수 있습니다.
def를 통해 함수를 정의할 수 있습니다. 예를 들어 두 변수를 입력받아 합한 값을 출력하는 함수를 정의해 봅시다.
#함수 definition
def add(x1,x2) :
result = 0
result = x1 + x2
return result이렇게 함수를 선언하면 앞으로 작성하는 코드에서 위의 함수를 사용할 수 있습니다.
#함수 definition
def add(x1,x2) :
result = 0
result = x1 + x2
return result
#실제 동작 코드
a = int(input("a의 값을 입력하세요: "))
b = int(input("b의 값을 입력하세요: "))
c = add(a,b)
print(c)
>> a의 값을 입력하세요: 15
>> b의 값을 입력하세요: 21
>> 36위의 예시를 보면 return이 있습니다. 이는 이 함수가 반환 값이 있다는 뜻입니다. 그래서 c 변수에 result 반환 값을 입력해 주었죠. 그렇다면 함수에는 반드시 return 하는 값이 있어야 할까요?? 그건 아닙니다.
#함수 definition
def veriln_print(a) :
print("입력된 값은",a,"입니다")
#실제 동작 코드
a = input("a의 값을 입력하세요: ")
veriln_print(a)
>> a의 값을 입력하세요: 엄마가 섬그늘에
>> 입력된 값은 엄마가 섬그늘에 입니다위와 같이 반환 값이 없는 경우도 함수를 정의하여 사용할 수 있습니다.
Python 함수 활용 예시
그러면 사칙연산 함수를 만들어보겠습니다.
#함수 definition
def cal(x1,x2,option) :
result = 0
if option == '+' :
result = x1 + x2
elif option == '-' :
result = x1 - x2
elif option == '*' :
result = x1 * x2
elif option == '/' :
result = x1 / x2
return result
#실제 동작 코드
a = int(input("a의 값을 입력하세요: "))
b = int(input("b의 값을 입력하세요: "))
print(cal(a,b,'+'))
print(cal(a,b,'-'))
print(cal(a,b,'*'))
print(cal(a,b,'/'))
>> a의 값을 입력하세요: 15
>> b의 값을 입력하세요: 5
>> 20
>> 10
>> 75
>> 3.0input의 여러 형태
함수에는 input 값과 return 값을 지정할 수도, 지정하지 않을 수도 있습니다. 위의 정의된 함수를 보면 input 값의 개수가 지정되어 있는데요, 만약 input 값의 개수를 모를 때는 어떻게 해야 할까요?
튜플 input
변수 앞에 *을 붙이면 함수가 입력 변수를 튜플 형태로 인식하게 됩니다. 이럴 경우 input 변수를 여러 개 지정하지 않아도 됩니다. 예시를 볼까요?
#함수 definition
def add(*value) :
result = 0
for i in value :
result += i
return result
#실제 동작 코드
a = add(1,2,3,4,5,6,7,8,9,10)
print(a)
>> 55함수에 입력되는 변수인 value 앞에 *을 붙여서 튜플 형태로 인식시키니 변수를 일일이 선언하지 않아도 함수에서 사용할 수 있는 것을 알 수 있습니다.
딕셔너리 input
변수 앞에 **을 붙이면 함수가 입력 변수를 딕셔너리 형태로 인식하게 됩니다.
#함수 definition
def func(**value) :
for i in value.keys() :
print("%s = %s원 이다" %(i, value[i]))
func(초코=2000, 과자=1500, 사탕=500)
>> 초코 = 2000원 이다
>> 과자 = 1500원 이다
>> 사탕 = 500원 이다local 변수와 global 변수
한 프로그램에서 여러 개의 함수를 선언할 수 있습니다. 그런데 local 변수는 한 함수에서만 사용이 가능하지만, global 변수는 모든 함수에서 사용 가능하다는 차이가 있습니다. 이 두 변수는 선언되는 위치에 따라 local 변수인지 global 변수인지 정해집니다.
만약 변수가 함수 정의 파트 안에 선언되면 local 변수, 함수 밖에서 선언되면 global 변수가 됩니다. 우선 먼저 local 변수를 활용하는 예시를 보겠습니다.
#local 변수 활용
#함수 definition
def veriln_print1() :
a = 5
print("a의 값은",a,"입니다")
def veriln_print2() :
a = 10
print("a의 값은",a,"입니다")
#실제 동작 코드
veriln_print1()
veriln_print2()
>> a의 값은 5 입니다
>> a의 값은 10 입니다a를 각각의 함수에서 선언하니 함수마다 출력되는 a의 값이 다른 것을 알 수 있습니다.
다음은 global 함수의 활용입니다.
#global 변수 활용
#함수 definition
def veriln_print1() :
print("1번 함수에서 a의 값은",a,"입니다")
def veriln_print2() :
print("2번 함수에서 a의 값은",a,"입니다")
#변수 선언
a = 30
#실제 동작 코드
veriln_print1()
veriln_print2()
>> 1번 함수에서 a의 값은 30 입니다
>> 2번 함수에서 a의 값은 30 입니다a가 함수 바깥에 선언되니 두 함수 모두 a의 값이 30인 것을 알 수 있습니다. 함수 뒤에 선언되든, 함수 앞에 선언되는 결과는 같습니다.
#global 변수 활용
#변수 선언
a = 30
#함수 definition
def veriln_print1() :
print("1번 함수에서 a의 값은",a,"입니다")
def veriln_print2() :
print("2번 함수에서 a의 값은",a,"입니다")
#실제 동작 코드
veriln_print1()
veriln_print2()
>> 1번 함수에서 a의 값은 30 입니다
>> 2번 함수에서 a의 값은 30 입니다Python 모듈
지금까지는 하나의 .py 파일에만 코드를 작성하여 프로그래밍을 해왔습니다. 그런데 이렇게 작업하면 시간이 갈수록 스크립트가 너무 길어진다는 단점이 있습니다. 그래서 많이 쓰는 함수를 한 파일에 지정해 놓고 그 함수들을 import 하여 더 편리하게 작업할 수 있습니다. 그러면 어떻게 파일을 모듈화하여 사용하는지 알아보도록 하겠습니다.
Python 모듈 파일 생성
먼저 함수들을 정의할 파일을 만들어야겠죠? 저는 function.py라는 파일로 저장하도록 하겠습니다.
def plus(*value) :
result = 0
for i in value :
result += i
return result
def minus(x1,x2) :
result = 0
result = x1 - x2
return result
def mul(*value) :
result = 1
for i in value :
result *= i
return result
def div(x1,x2) :
result = 0
result = x1 / x2
return resultPython 모듈 사용 방법
생성된 모듈 파일을 사용하려면 import 함수를 써야 합니다.
#모듈 사용 방법: 모듈.함수(input 변수)
import function
a = function.plus(10,15,34,96)
print(a)
a = function.minus(53,22)
print(a)
a = function.mul(3,8,51)
print(a)
a = function.div(96,32)
print(a)
>> 155
>> 31
>> 1224
>> 3.0위와 같이 모듈을 사용해 편하게 프로그래밍하고 코드를 간소화할 수 있습니다. 그런데 위의 예시에서는 모듈에서 불러온 함수 하나하나에 일일이 모듈 이름을 적어야 했는데요, 이것도 없앨 수 있습니다.
from function import plus, minus, mul, div
a = plus(10,15,34,96)
print(a)
a = minus(53,22)
print(a)
a = mul(3,8,51)
print(a)
a = div(96,32)
print(a)
>> 155
>> 31
>> 1224
>> 3.0function이라는 모듈에서 불러올 함수들을 일일이 지정하는 방법인데요, 모듈의 모든 함수를 불러올 경우 *을 사용하면 됩니다.
from function import *
a = plus(10,15,34,96)
print(a)
a = minus(53,22)
print(a)
a = mul(3,8,51)
print(a)
a = div(96,32)
print(a)
>> 155
>> 31
>> 1224
>> 3.0References: 위키독스