Python (4) - 내장 함수, 표준 라이브러리, 외부 라이브러리

내장 함수

 

파이썬 내장 함수는 파이썬 모듈과 달리 import가 필요하지 않기 때문에 아무런 설정 없이 바로 사용가능합니다. 활용 빈도가 높은 내장 함수들을 살펴보겠습니다.

 

abs

 

숫자의 절댓값을 리턴합니다.

>>> abs(3)
3
>>> abs(-3)
3
>>> abs(-1.2)
1.2

 

all

 

반복 가능한 데이터의 모든 요소가 참이면 True, 하나라도 거짓이면 False를 리턴합니다. (빈 값인 경우에는 True를 리턴합니다.)

>>> all([1, 2, 3])
True
>>> all([1, 2, 3, 0])
False
>>> all([])
True

 

any

 

반복 가능한 데이터의 요소 중 참이 있으면 True, 모두 거짓이면 False를 리턴합니다. (빈 값인 경우에는 False를 리턴합니다.)

>>> any([1, 2, 3, 0])
True
>>> any([0, ""])
False
>>> any([])
False

 

chr

 

유니코드 숫자 값을 입력받아 그 코드에 해당하는 문자를 리턴합니다.

>>> chr(97)
'a'
>>> chr(44032)
'가'

 

dir

 

객체가 지닌 변수나 함수를 보여주는 함수입니다.

>>> dir([1, 2, 3])
['append', 'count', 'extend', 'index', 'insert', 'pop',...]
>>> dir({'1':'a'})
['clear', 'copy', 'get', 'has_key', 'items', 'keys',...]

 

divmod

 

숫자 a, b를 입력 받아 a를 b로 나눈 몫과 나머지를 튜플로 리턴합니다.

>>> divmod(7, 3)
(2, 1)

 

enumerate

 

'열거하다' 라는 뜻으로, 순서가 있는 데이터를 입력 받아 인덱스 값을 포함하는 enumerate 객체를 리턴합니다.

>>> for i, name in enumerate(['body', 'foo', 'bar']):
...     print(i, name)
...
0 body
1 foo
2 bar

 

eval

 

문자열로 구성된 표현식을 입력 받아 해당 문자열을 실행한 결과값을 리턴합니다.

>>> eval('1+2')
3
>>> eval("'hi' + 'a'")
'hia'
>>> eval('divmod(4, 3)')
(1, 1)

 

filter

 

첫 번째 인수로 함수, 두 번째 인수로 그 함수에 들어갈 반복 가능한 데이터를 받습니다. 그리고 반복 가능한 데이터의 요소 순서대로 함수를 호출했을 때 리턴값이 참인 것만 묶어서 리턴합니다.

def positive(x):
    return x > 0

print(list(filter(positive, [1, -3, 2, 0, -5, 6])))

 

hex

 

정수를 입력받아 16진수(hexadecimal) 문자열로 변환하여 리턴합니다.

>>> hex(234)
'0xea'
>>> hex(3)
'0x3'

 

id

 

객체를 입력받아 객체의 고유 주솟값(레퍼런스)를 리턴합니다.

>>> a = 3
>>> id(3)
135072304
>>> id(a)
135072304
>>> b = a
>>> id(b)
135072304

 

input

 

사용자 입력을 받는 함수로 입력 인수로 문자열을 전달하면 그 문자열은 프롬프트가 됩니다.

>>> a = input()
hi
>>> a
'hi'
>>> b = input("Enter: ")
Enter: hi
>>> b
'hi'

 

int

 

문자열 형태의 숫자나 소수점이 있는 숫자를 정수로 리턴합니다. 두 번째 인수로 해당 숫자가 어떤 진수로 표현되었는지 입력할 수 있습니다.

>>> int('3')
3
>>> int(3.4)
3
>>> int('1A', 16)
26

 

isinstance

 

첫 번째 인수로 객체, 두 번째 인수로 클래스를 받습니다. 객체가 해당 클래스의 인스턴스인지 판단하여 bool 값으로 리턴합니다.

>>> class Person: pass
...
>>> a = Person()
>>> isinstance(a, Person)
True

 

len

 

입력값의 길이(요소 전체 개수)를 리턴합니다.

>>> len("python")
6
>>> len([1,2,3])
3
>>> len((1, 'a'))
2

 

list

 

반복 가능한 데이터를 리스트로 만들어 리턴합니다.

>>> list("python")
['p', 'y', 't', 'h', 'o', 'n']
>>> list((1,2,3))
[1, 2, 3]

 

map

 

함수 (f)와 반복 가능한 데이터를 입력 받아, 반복 가능한 데이터의 각 요소에 함수 f를 적용한 결과를 리턴합니다.

>>> def two_times(x): 
...     return x*2
...
>>> list(map(two_times, [1, 2, 3, 4]))
[2, 4, 6, 8]

 

lambda를 사용하여 다음처럼 간단하게 표현할 수 있습니다.

>>> list(map(lambda a: a*2, [1, 2, 3, 4]))
[2, 4, 6, 8]

 

max

 

반복 가능한 데이터를 입력 받아 그 최댓값을 리턴합니다.

>>> max([1, 2, 3])
3
>>> max("python")
'y'

 

min

 

반복 가능한 데이터를 입력 받아 그 최솟값을 리턴합니다.

>>> min([1, 2, 3])
1
>>> min("python")
'h'

 

oct

 

정수를 8진수 문자열로 바꾸어 리턴합니다.

>>> oct(34)
'0o42'
>>> oct(12345)
'0o30071'

 

open

 

'파일 이름'과 '읽기 방법'을 입력받아 파일 객체를 리턴합니다. 읽기 방법(mode)를 생략하면 기본값인 읽기 모드(r)로 파일 객체를 만들어 리턴합니다.

b 모드는 w, r, a 와 함께 사용됩니다.
>>> f = open("binary_file", "rb")	# 바이너리 읽기 모드

 

ord

 

문자의 유니코드 숫자 값을 리턴합니다. (chr 함수와 반대로 동작합니다.)

>>> ord('a')
97
>>> ord('가')
44032

 

pow

 

x를 y제곱한 결과를 리턴합니다. (** 연산자와 동일합니다.)

>>> pow(2, 4)
16
>>> pow(3, 3)
27

 

range

 

주로 for문과 함께 사용하는 함수로 입력받은 숫자에 해당하는 범위 값을 반복 가능한 객체로 만들어 리턴합니다.

인수가 하나일 경우

시작 숫자를 지정해 주지 않으면 range 함수는 0부터 시작합니다.

>>> list(range(5))
[0, 1, 2, 3, 4]

 

인수가 2개일 경우

2개의 인수는 각각 시작 숫자와 끝 숫자를 의미합니다.

>>> list(range(5, 10))
[5, 6, 7, 8, 9]

 

인수가 3개일 경우

3번째 인수는 숫자 사이의 거리(간격)를 의미합니다.

>>> list(range(1, 10, 2))
[1, 3, 5, 7, 9]
>>> list(range(0, -10, -1))
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]

 

round

 

숫자를 입력받아 반올림해 리턴합니다. (두 번째 인수는 소수점 자릿수입니다.)

>>> round(4.6)
5
>>> round(4.2)
4
>>> round(5.678, 2)
5.68

 

sorted

 

입력 데이터를 정렬한 후 그 결과를 리스트로 리턴합니다. (오름차순)

>>> sorted([3, 1, 2])
[1, 2, 3]
>>> sorted(['a', 'c', 'b'])
['a', 'b', 'c']
>>> sorted("zero")
['e', 'o', 'r', 'z']
>>> sorted((3, 2, 1))
[1, 2, 3]

 

str

 

문자열 형태로 객체를 변환하여 리턴합니다.

>>> str(3)
'3'
>>> str('hi')
'hi'

 

sum

 

입력 데이터의 합을 리턴합니다.

>>> sum([1,2,3])
6
>>> sum((4,5,6))
15

 

tuple

 

반복 가능한 데이터를 튜플로 바꾸어 리턴합니다.

>>> tuple("abc")
('a', 'b', 'c')
>>> tuple([1, 2, 3])
(1, 2, 3)
>>> tuple((1, 2, 3))
(1, 2, 3)

 

type

 

입력값의 자료형을 리턴합니다.

>>> type("abc")
<class 'str'>
>>> type([ ])
<class 'list'>
>>> type(open("test", 'w'))
<class '_io.TextIOWrapper'>

 

zip

 

동일한 개수로 이루어진 데이터들을 묶어서 리턴합니다.

>>> list(zip([1, 2, 3], [4, 5, 6]))
[(1, 4), (2, 5), (3, 6)]
>>> list(zip([1, 2, 3], [4, 5, 6], [7, 8, 9]))
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
>>> list(zip("abc", "def"))
[('a', 'd'), ('b', 'e'), ('c', 'f')]

 

 

 

표준 라이브러리

 

파이썬 표준 라이브러리는 파이썬을 설치할 때 자동으로 설치되는 라이브러리입니다.

 

datetime.date

 

datetime.date는 연, 월, 일로 날짜를 표현할 때 사용하는 함수입니다.

>>> import datetime
>>> day1 = datetime.date(2021, 12, 14)
>>> day2 = datetime.date(2023, 4, 5)

# 날짜 차이
>>> diff = day2 - day1
>>> diff.days
477

# 요일 (0부터)
>>> day = datetime.date(2021, 12, 14)
>>> day.weekday()
1

# 요일 (1부터)
>>> day.isoweekday()
2

 

time

 

시간과 관련된 모듈입니다.

>>> import time
>>> time.time()
1684983953.5221913

>>> time.localtime()
time.struct_time(tm_year=2023, tm_mon=5, tm_mday=21, tm_hour=16,
    tm_min=48, tm_sec=42, tm_wday=1, tm_yday=141, tm_isdst=0)
    
>>> time.asctime()
'Fri Apr 28 20:50:20 2023'

>>> time.ctime()
'Fri Apr 28 20:56:31 2023'

>>> time.strftime('%x', time.localtime(time.time()))
'05/25/23'
>>> time.strftime('%c', time.localtime(time.time()))
'Thu May 25 10:13:52 2023'

for i in range(10):
    print(i)
    time.sleep(1)

 

math.gcd

 

파이썬 3.5 버전부터 사용할 수 있는 최대 공약수를 구하는 함수입니다.

>>> import math
>>> math.gcd(60, 100, 80)
20

 

math.lcm

 

파이썬 3.9 버전부터 사용할 수 있는 최소 공배수를 구하는 함수입니다.

>>> import math
>>> math.lcm(15, 25)
75

 

random

 

난수를 발생시키는 모듈입니다.

>>> import random
>>> random.random()
0.53840103305098674

>>> random.randint(1, 10)
6

>>> data = [1, 2, 3, 4, 5]
>>> random.sample(data, len(data))
[5, 1, 3, 4, 2]

 

itertools.zip_longest

 

같은 개수의 자료형을 묶는 파이썬 내장 함수인 zip 함수와 동일하게 동작하나 반복 가능한 객체의 길이가 다른 경우에도 길이에 맞춰 설정한 값을 채울 수 있습니다.

# itertools_zip.py
import itertools

students = ['한민서', '황지민', '이영철', '이광수', '김승민']
snacks = ['사탕', '초컬릿', '젤리']

result = itertools.zip_longest(students, snacks, fillvalue='새우깡')
print(list(result))

# [('한민서', '사탕'), ('황지민', '초콜릿'), ('이영철', '젤리'), ('이광수', '새우깡'), ('김승민', '새우깡')]

 

itertools.permutations

 

반복 가능한 객체 중에서 r개를 선택한 순열을 이터레이터로 리턴하는 함수입니다.

>>> import itertools
>>> list(itertools.permutations(['1', '2', '3'], 2))

# [('1', '2'), ('1', '3'), ('2', '1'), ('2', '3'), ('3', '1'), ('3', '2')]

 

itertools.combinations

 

반복 가능한 객체 중에서 r개를 선택한 조합을 이터레이터로 리턴하는 함수입니다.

>>> import itertools
>>> list(itertools.combinations(['1', '2', '3'], 2))

# [('1', '2'), ('1', '3'), ('2', '3')]

 

functools.reduce

 

함수를 반복 가능한 객체의 요소에 차례대로 누적 적용하여 이 객체를 하나의 값으로 줄이는 함수입니다.

import functools

data = [1, 2, 3, 4, 5]
result = functools.reduce(lambda x, y: x + y, data)
print(result)  # 15 출력

 

operator.itemgetter

 

주로 sorted와 같은 함수의 key 매개변수에 적용하여 다양한 기준으로 정렬할 수 있도록 도와주는 모듈입니다.

from operator import itemgetter

students = [
    ("jane", 22, 'A'),
    ("dave", 32, 'B'),
    ("sally", 17, 'B'),
]

result = sorted(students, key=itemgetter(1))
print(result)
from operator import itemgetter

students = [
    {"name": "jane", "age": 22, "grade": 'A'},
    {"name": "dave", "age": 32, "grade": 'B'},
    {"name": "sally", "age": 17, "grade": 'B'},
]

result = sorted(students, key=itemgetter('age'))
print(result)

 

shutil

 

파일을 복사하거나 이동할 때 사용하는 모듈입니다.

# shutil_copy.py
import shutil

shutil.copy("c:/doit/a.txt", "c:/temp/a.txt.bak")

 

glob

 

디렉터리 안의 파일들을 읽어서 리턴합니다.

>>> import glob
>>> glob.glob("c:/doit/mark*")
['c:/doit\\marks1.py', 'c:/doit\\marks2.py', 'c:/doit\\marks3.py']

 

pickle

 

객체의 형태를 그대로 유지하면서 파일에 저장하고 불러올 수 있게 하는 모듈입니다.

>>> import pickle
>>> f = open("test.txt", 'wb')
>>> data = {1: 'python', 2: 'you need'}
>>> pickle.dump(data, f)
>>> f.close()
>>> import pickle
>>> f = open("test.txt", 'rb')
>>> data = pickle.load(f)
>>> print(data)
{2:'you need', 1:'python'}

 

os

 

환경 변수나 디렉터리, 파일 등의 OS 자원을 제어할 수 있게 해 주는 모듈입니다.

시스템 환경 변수

>>> import os
>>> os.environ
environ({'PROGRAMFILES': 'C:\\Program Files', 'APPDATA': … 생략 …})

>>> os.environ['PATH']
'C:\\ProgramData\\Oracle\\Java\\javapath;...생략...'

 

디렉터리 위치 변경

>>> os.chdir("C:\WINDOWS")

 

디렉터리 위치 조회

>>> os.getcwd()
'C:\WINDOWS'

 

시스템 명령어 호출

>>> os.system("dir")

 

시스템 명령어 실행 결과

>>> f = os.popen("dir")
>>> print(f.read())

 

그 외에도 mkdir(디렉터리 생성), rmdir(디렉터리 삭제), remove(파일 삭제), rename(이름 변경) 와 같은 함수가 있습니다.

 

zipfile

 

여러 개의 파일을 zip 파일 형식으로 합치거나 이를 해제할 때 사용합니다.

import zipfile

# 파일 합치기
with zipfile.ZipFile('mytext.zip', 'w') as myzip:
    myzip.write('a.txt')
    myzip.write('b.txt')
    myzip.write('c.txt')

# 해제하기
with zipfile.ZipFile('mytext.zip') as myzip:
    myzip.extractall()

 

threading

 

스레드 프로그래밍에 관한 모듈입니다.

import time
import threading

def long_task():
    for i in range(5):
        time.sleep(1)
        print("working:%s\n" % i)

print("Start")

threads = []
for i in range(5):
    t = threading.Thread(target=long_task)
    threads.append(t)

for t in threads:
    t.start()

for t in threads:
    t.join()  # join으로 스레드가 종료될때까지 기다립니다.

print("End")

 

templfile

 

파일을 임시로 만들어서 사용할 때 유용한 모듈입니다.

  • tempfile.TemporaryFile() : 임시 파일 생성
  • tempfile.TemporaryDirectory() : 임시 디렉터리 생성
import tempfile

with tempfile.TemporaryFile(mode='w+t') as f:
    f.write('임시 데이터')
    f.seek(0)
    print(f.read())  # 출력: 임시 데이터 # 파일은 자동 삭제

with tempfile.TemporaryDirectory() as d:
    print(f"디렉터리 생성됨: {d}")  # 디렉터리는 블록 종료 후 자동 삭제

 

traceback

 

프로그램 실행 중 발생한 오류를 추적하고자 할 때 사용하는 모듈입니다.

import traceback

def a():
    return 1/0

def b():
    a()

def main():
    try:
        b()
    except:
        print("오류가 발생했습니다.")
        print(traceback.format_exc())

main()

 

json

 

JSON 데이터를 쉽게 처리하고자 사용하는 모듈입니다.

>>> import json
>>> with open('myinfo.json') as f:
...     data = json.load(f)
... 
>>> type(data)
<class 'dict'>
>>> data
{'name': '홍길동', 'birth': '0525', 'age': 30}

위와 같이 파일에서 load() 함수를 사용해서 dict 자료형으로 읽어올 수 있습니다.

>>> import json
>>> d = {"name":"홍길동", "birth":"0525", "age": 30}

>>> json_data = json.dumps(d)
>>> json_data
'{"name": "\\ud64d\\uae38\\ub3d9", "birth": "0525", "age": 30}'

>>> json_data = json.dumps(d, ensure_ascii=False)
>>> json_data
'{"name": "홍길동", "birth": "0525", "age": 30}'

>>> json.loads(json_data)
{'name': '홍길동', 'birth': '0525', 'age': 30}

위와 같이 dumps() 함수를 사용해서 dict 자료형을 JSON 문자열로 만들 수 있습니다. 그런데 이때 한글 문자열이 아스키 형태로 나오게 되는데 ensure_ascii=False 옵션을 사용하면 아스키로 변경되는 것을 방지할 수 있습니다. 

 

또한 loads() 함수를 사용해서 다시 JSON 문자열을 dict 자료형으로 변환할 수 있습니다.

>>> d = {"name":"홍길동", "birth":"0525", "age": 30}
>>> print(json.dumps(d, indent=2, ensure_ascii=False))
{
  "name": "홍길동",
  "birth": "0525",
  "age": 30
}

출력되는 JSON 문자열을 보기 좋게 정렬하려면 위와 같이 indent 옵션을 추가하면 됩니다.

 

urllib

 

URL을 읽고 분석할 때 사용하는 모듈입니다. 

import urllib.request

def get_wikidocs(page):
    resource = 'https://wikidocs.net/{}'.format(page)
    with urllib.request.urlopen(resource) as s:
        with open('wikidocs_%s.html' % page, 'wb') as f:
            f.write(s.read())

 

webbrowser

 

시스템 브라우저를 호출할 때 사용하는 모듈입니다.

import webbrowser

webbrowser.open_new('http://python.org')

 

 

 

외부 라이브러리

 

파이썬 표준 라이브러리가 아닌 경우 pip 도구를 이용해 설치해야 합니다.

 

pip

 

pip 는 파이썬 모듈이나 패키지를 쉽게 설치할 수 있도록 도와주는 도구입니다. pip으로 파이썬 프로그램을 설치하면 의존성 있는 모듈이나 패키지를 함께 설치해 주기 때문에 매우 편리합니다. 예를 들어 B라는 파이썬 패키지를 설치하려면 A라는 패키지가 먼저 설치되어야 하는 규칙이 있다고 가정할 때 pip을 이용하면 B 패키지를 설치할 때 A 패키지도 자동으로 함께 설치됩니다.

 

pip install

PyPi(pythond package index)는 파이썬 소프트웨어가 모인 저장 공간입니다. 현재 이곳에는 10만 건 이상의 파이썬 패키지가 등록되어 있으며 이곳에 등록된 파이썬 패키지는 누구나 내려받아 사용할 수 있습니다. 이곳에서 직접 내려받아 설치해도 되지만, pip 를 이용하면 다음과 같이 간편하게 설치할 수 있습니다.

pip install SomePackage

 

pip uninstall

설치한 패키지를 삭제하고 싶다면 다음 명령어로 삭제할 수 있습니다.

pip uninstall SomePackage

 

특정 버전으로 설치

다음과 같이 버전을 지정하여 설치할 수도 있습니다. (생략하는 경우 최신 버전을 설치합니다.)

pip install SomePackage==1.0.4

 

최신 버전으로 업그레이드

패키지를 최신 버전으로 업그레이드하려면 --upgrade 옵션과 함께 사용합니다.

pip install --upgrade SomePackage

 

설치된 패키지 확인

다음 명령어를 통해 pip를 이용하여 설치한 패키지 목록을 확인할 수 있습니다.

pip list

 

requirements.txt 파일 생성

다음 명령어를 통해 현재 설치된 모든 패키지를 기준으로 requirements.txt 파일을 생성할 수 있습니다.

pip freeze > requirements.txt

 

Faker

 

테스트용 가짜 데이터를 생성할 때 사용하는 라이브러리입니다. (Faker 라이브러리는 pip를 이용하여 설치해야 합니다.)

pip install Faker
>>> from faker import Faker
>>> fake = Faker()
>>> fake.name()
'Matthew Estrada'

>>> fake = Faker('ko-KR')
>>> fake.name()
'김하은'

>>> fake.address()
'충청북도 수원시 잠실6길 (경자주이읍)'

>>> test_data = [(fake.name(), fake.address()) for i in range(30)]

 

다음은 Faker에서 제공하는 대표적인 항목입니다.

 

 

sympy

 

sympy는 방정식 기호(symbol)를 사용하게 해주는 외부 라이브러리입니다. (sympy 라이브러리는 pip를 이용하여 설치해야 합니다.)

pip install sympy
>>> import sympy
>>> x = sympy.symbols("x")
>>> f = sympy.Eq(x**2, 1)
>>> sympy.solve(f)
[-1, 1]
>>> import sympy
>>> x, y = sympy.symbols('x y')
>>> f1 = sympy.Eq(x+y, 10)
>>> f2 = sympy.Eq(x-y, 4)
>>> sympy.solve([f1, f2])
{x: 7, y: 3}

 

미지수가 2개 이상이라면 결괏값이 리스트가 아닌 딕셔너리로 반환됩니다.

'Lang > Python' 카테고리의 다른 글

Python (3) - 클래스, 모듈, 패키지, 예외 처리  (0) 2025.05.13
Python (2) - 제어문, 함수, 입출력  (0) 2025.05.02
Python (1) - 자료형  (2) 2025.04.30