index
1. 함수
(1) 함수란
(2) 변수 사용
2. 모듈
(1) 제작 및 사용법
(2) 패키지
파이썬에서 사용하는 함수는 수학에서 사용하는 함수처럼 변수안에 특정 값이 대입했을 때 일정한 식에 의한 값을 호출하는 것이다.
첫 시간부터 지금까지 가장많이 사용하는 print() 함수처럼 기본으로 제공되는 '내장 함수'가 있고, 사용자가 직접 식을 설계하는 '사용자 함수'가 있다.
이제부터 정리할 내용은 사용자 함수에 관한 것이다.
함수를 설계할 때는 일정한 구조가 필요하다.
def 함수명():
함수내용
만약 printSth()라는 이름의 함수를 호출하면 '파이썬 중급!!' 이라는 문구를 출력하는 함수를 만들자면
def printSth():
print('파이썬 중급')
이런 코드식을 만들 수 있는 것이다.
또한, 함수 내용 안에 return키워드로 함수 실행 결과를 호출할 때 불러올 수가 있다.
간단하게 함수 안에 정수를 입력할 때, 무조건 1씩 더해서 출력해주는 함수를 만들고 싶다면
def plus1(n):
return n+1
이렇게 return으로 plus1(1)을 호출하면 값 2를 얻을 수 있는 것이다.
함수명 = lambda 매개변수 : 함수내용
이런식으로 코드를 짜는 것이다. 변수 n에 값을 입력했을 때 1을 더한 값을 출력하고 싶다면
plus1 = lambda n : n+1
이런식의 코드 작성도 가능한 것이다.
def 함수명(매개변수1, 매개변수2, ...):
함수내용
함수명(인수1, 인수2, ...)
이런식으로 매개변수를 통해서 내용안에 특정한 식을 설계할 수 있다.
예를 들어 함수를 호출했을 때 두 개의 매개변수의 덧셈값을 출력하고 싶다면
def add(n1, n2):
print(f'{n1} + {n2} = {n1 + n2}')
이런 코드를 짤 수 있고, add(1,2)를 호출한다면
1 + 2 = 3
이라는 함수값을 출력할 수 있다.
매개변수의 개수는 자유롭게 정할 수 있지만 만약 그 개수가 정해지지 않았다면
def 함수명(*매개변수):
함수내용
이런식으로 매개변수 안에 '*'을 붙여서 미지의 개수를 설정할 수 있다.
def printNumber():
n = 10
print(f'n: {n}')
printNumber()
print(f'n: {n}')
이런식으로 함수 안에서 정의된 것으로, 함수를 호출했을 때만 n: 10의 값을 얻을 수 있고, 함수 호출 없이 단지 n을 출력하고 싶어도 n은 할당되지 않았기 때문에 변수가 정의되지 않았다는 NameError만 출력하게 된다.
n = 10
def printNumber():
print(f'n: {n}')
이러한 코드안에서 전역변수란 함수 밖에서 이미 설정된 n을 말하는 것으로, 함수 안에서도 n는 자유롭게 사용할 수 있다. 이때 함수 printNumber()를 호출하면 n: 10의 값을 출력할 수 있다. 그런데
n = 10
def printNumber():
n = 58
print(f'n: {n}')
이런식으로 전역변수 n을 함수 안에서 다시 n=58로 할당하고 싶어도 printNumber()를 통한 함수호출이 있어야 n: 58의 값을 출력할 수 있을 뿐이지 단순히 함수호출 없이print(f'n: {n}')의 값을 출력하면 n: 10의 값만 얻을 수 있을 뿐이다.
하지만 만약에 함수 내용 안에서 global키워드를 사용한다면 함수 안에서도 전역변수의 값을 수정할 수 있다.
n = 10
def printNumber():
global n
n = 58
print(f'n: {n}')
printNumber()
print(f'n: {n}')
이런식으로 함수 코드를 짠다면 출력값으로 함수호출로 n을 출력하든 함수호출 없이 n을 출력하든 모두 n: 58의 값을 출력할 수 있게 된다.
이미 앞에서 실습예제를 풀어보면서 datetime이나 random같은 모듈을 사용한 적이 있어서 직관적으로 받아들이기는 쉬웠다. 마치 성질 비슷한 함수들의 케이스 같은 느낌?
크게 세 가지 종류가 있는데, 파이썬에 내장되어 기본적으로 사용할 수 있는 '내부 모듈', 따로 설치를 해야 사용할 수 있는 '외부 모듈', 사용자가 직접 만들어서 사용할 수 있는 '사용자 모듈'이 있다. 함수와 마찬가지로 주로 사용자 모듈에 관한 내용을 살펴보려고 한다.
제작법
예를 들어서, calculator라는 이름의 모듈을 만들어서 그 안에 사칙연산이 가능한 함수를 내장한다고 하자.
특정 파이썬 디렉토리 안에 calculator라는 이름의 파이썬 파일을 만들면 모듈이 만들어진 것이고, 그 안에 함수식들을 정의하면 해당 모듈 안의 함수들이 만들어 진 것이다.

사용법
사용자 모듈은 동일 디렉토리 안에서의 사용이 가능한데, 다른 파이썬 파일 안에서 키워드들을 통해서 모듈을 불러올 수 있다.
먼저, import 키워드를 통해서 모듈을 불러올 수 있다.
import 모듈명
모듈명.함수1()
모듈명.함수2()
이런 식으로 모듈을 불러온다면 그에 따른 함수도 얼마든지 사용할 수 있게 된다.
또한 예시로 생성한 calculator 모듈처럼 모듈명이 길어서 사용하기 불편하다면 import키워드에 as키워드를 앞에 붙여서 단축명을 지시할 수 도 있다.
import 모듈명 as 단축명
단축명.함수1()
단축명.함수2()

뿐만 아니라, from 키워드를 통해서 모듈의 특정 기능만을 불러올 수 있다.

이런식으로
from 모듈명 import 함수1
from 모둘명 import *
from 모듈명 import 함수1, 함수2
첫 번째 코드처럼 모듈 안의 함수를 하나씩 불러올 수도 있고(이때에는 오직 함수1만 사용할 수 있음), *을 통해서 모든 함수를 가져올 수도 있고, n개의 함수들만 골라서 불러올 수도 있다.
만약 하나의 디렉토리 안에 addModule, subModule, mulModule, divModule을 따로 만들어서 각각 덧셈,뺄셈,곱셈, 나눗셈이 가능하게 한다고 하자. 이때 각자의 파이썬 파일 안에서 '__name__'변수를 확인한다면 각자의 파일 안에서는 각각이 메인이 되므로 '__main__'값을 출력하게 된다.

하지만 만약에 이제 다른 파이썬 파일 안에서 4개의 모듈들을 불러와 '__name__'변수를 확인한다면 해당 파일이 메인파일이 되는 것이고, 모듈들은 실행(메인)파일이 아니게 되니, 모듈 이름만 저장되게 된다.

파이썬 내에서 패키지를 이용한다면 비슷한 성질의 모듈을 또 하나의 그룹으로 묶어서 관리할 수 있다.
만약에 사칙연산이 가능한 모듈을 따로 만든다고 해도, 각각 실수 버전, 정수 버전으로 구분하고 싶다면 패키지를 나눠서 저장해서 함수값을 구할 수 있는 것이다.
마찬가지로 불러올 때에는 앞의 from과 import키워드를 사용해서 불러올 수 있다.

모듈을 처음에 설명할 때 동일 디렉토리 안에 저장되어야 불러와서 사용할 수 있다고 했다. 그런데 파이썬에는 venv라는 가상환경의 라이브러리가 존재하는 이 안의 site-packages으로 디렉토리를 이동시키면 범용으로 사용할 수 있게 된다.

site-packages 안으로 옮긴 Calculator 디렉토리안의 모듈을

다른 디렉토리 안의 파이썬 파일에서 이렇게 불러와서 사용할 수 있다.