[004일차] 함수와 모듈 / 파이썬 중급

이연희·2023년 8월 7일

index
1. 함수
(1) 함수란
(2) 변수 사용
2. 모듈
(1) 제작 및 사용법
(2) 패키지

1. 함수

(1) 함수란

파이썬에서 사용하는 함수는 수학에서 사용하는 함수처럼 변수안에 특정 값이 대입했을 때 일정한 식에 의한 값을 호출하는 것이다.
첫 시간부터 지금까지 가장많이 사용하는 print() 함수처럼 기본으로 제공되는 '내장 함수'가 있고, 사용자가 직접 식을 설계하는 '사용자 함수'가 있다.
이제부터 정리할 내용은 사용자 함수에 관한 것이다.

  • 선언 및 호출

함수를 설계할 때는 일정한 구조가 필요하다.

def 함수명():
	함수내용

만약 printSth()라는 이름의 함수를 호출하면 '파이썬 중급!!' 이라는 문구를 출력하는 함수를 만들자면

def printSth():
	print('파이썬 중급')

이런 코드식을 만들 수 있는 것이다.

또한, 함수 내용 안에 return키워드로 함수 실행 결과를 호출할 때 불러올 수가 있다.

간단하게 함수 안에 정수를 입력할 때, 무조건 1씩 더해서 출력해주는 함수를 만들고 싶다면

def plus1(n):
	return n+1

이렇게 return으로 plus1(1)을 호출하면 값 2를 얻을 수 있는 것이다.

  • lambda를 이용한 함수 선언
    하지만, def키워드를 사용하지 않고도 함수를 선언할 수도 있는데 lambda키워드를 이용하는 것이다.
함수명 = lambda 매개변수 : 함수내용

이런식으로 코드를 짜는 것이다. 변수 n에 값을 입력했을 때 1을 더한 값을 출력하고 싶다면

plus1 = lambda n : n+1

이런식의 코드 작성도 가능한 것이다.

(2) 변수 사용

  • 매개변수와 인수
    함수는 매개변수를 사용해서 특정 인수값을 통한 함수값을 출력할 수도 있다.
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의 값을 출력할 수 있게 된다.

2. 모듈

이미 앞에서 실습예제를 풀어보면서 datetime이나 random같은 모듈을 사용한 적이 있어서 직관적으로 받아들이기는 쉬웠다. 마치 성질 비슷한 함수들의 케이스 같은 느낌?
크게 세 가지 종류가 있는데, 파이썬에 내장되어 기본적으로 사용할 수 있는 '내부 모듈', 따로 설치를 해야 사용할 수 있는 '외부 모듈', 사용자가 직접 만들어서 사용할 수 있는 '사용자 모듈'이 있다. 함수와 마찬가지로 주로 사용자 모듈에 관한 내용을 살펴보려고 한다.

(1) 제작 및 사용법

  • 제작법
    예를 들어서, 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개의 함수들만 골라서 불러올 수도 있다.

  • 실행(메인)파일
    모듈을 사용할 때 '__name__'변수를 통해서 모듈 이름을 알 수 있거나, 메인파일이 무엇인지 구분할 수도 있다.만약 메인파일이라면 '__main__'값을 출력하게 된다.

만약 하나의 디렉토리 안에 addModule, subModule, mulModule, divModule을 따로 만들어서 각각 덧셈,뺄셈,곱셈, 나눗셈이 가능하게 한다고 하자. 이때 각자의 파이썬 파일 안에서 '__name__'변수를 확인한다면 각자의 파일 안에서는 각각이 메인이 되므로 '__main__'값을 출력하게 된다.

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

(2) 패키지

파이썬 내에서 패키지를 이용한다면 비슷한 성질의 모듈을 또 하나의 그룹으로 묶어서 관리할 수 있다.

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

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

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

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

profile
안녕하세요, 데이터 공부를 하고 있습니다.

0개의 댓글