내장함수들은 파이썬 대부분의 객체에 대해 사용 가능하며 import할 필요가 없다. 주요 내장함수들은 다음과 같다.
파이썬 리스트는 정렬 메서드를 가지고 있다.
sorted() 함수는 전달된 리스트를 정렬한 새로운 리스트를 반환한다. sorted(list)
와 같이 작성한다.
sort() 함수는 리스트를 정렬하되 해당 리스트를 변경한다. list.sort()
와 같이 작성한다.
sort는 리스트에만 해당하지만 sorted의 경우 모든 이터러블 객체에 대해 가능하다. 딕셔너리의 경우 키를 정렬하여 반환한다.
key 매개변수는 정렬하기 전 각 요소에 대해 적용되는 함수를 지정할 수 있다.
print(sorted("The sun will rise and we'll try again".split(),
key=str.lower))
['again', 'and', 'rise', 'sun', 'The', 'try', "we'll", 'will']
또, 다음과 같이 특정 데이터를 기준으로 정렬하는 경우에 사용할 수 있다.
기본 정렬은 오름차순이다. 메서드 호출 시 reverse = True
를 추가해 reverse 매개변수에 True를 전달하면 내림차순 정렬된다.
리스트, 딕셔너리, 문자열 등 for 루프를 돌 때, in 뒤에는 요소에 대해 반복할 수 있는 객체가 필요한데, 이를 이터러블 객체라 한다. for문이 iter() 함수를 호출하면 이 함수는 이터레이터 객체를 반환한다.
이터러블 객체가 되려면 __iter__()
와 __next__()
메서드가 존재해야 한다.
__iter__()
는 이터러블 객체 자신을 반환하며 __next__()
는 다음 반복을 위한 값을 반환한다. 더 이상 값이 없다면 StopIteration 예외를 발생시키도록 한다.
다음은 클래스를 이터러블 클래스로 정의하는 예시이다.
이 객체를 for문에서 사용하면 다음과 같은 결과를 얻을 수 있다.
제너레이터는 함수로부터 이터레이터를 생성하는 방법이다. 일반적인 함수 형태에 yield 키워드를 붙여 생성한 제너레이터를 이터레이터로 사용할 수 있다.
클로저는 함수가 반환하는 함수이다.
참고 :
https://dojang.io/mod/page/view.php?id=2365
https://dojang.io/mod/page/view.php?id=2366
파이썬 연산자를 오버로딩하여 클래스의 메소드로 사용할 수 있다. +
연산자와 __add__(self, other)
메소드를 동일하게 사용할 수 있다. 그 밖에 __eq__(self, other)
, __sub__(self, other)
, __mul__(self, other)
등이 존재한다.
다음과 같이 메서드를 정의하여 사용할 수 있다.
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other): #연산자 +를 새로 정의
x = self.x + other.x
y = self.y + other.y
return Point(x, y)
def __str__(self): #Point 객체를 문자열로 출력하기 위해 정의
return "(" + str(self.x) + "," + str(self.y) + ")"
p1 = Point(3, 2)
p2 = Point(2, 3)
print(p1 + p2)
(5,5)
함수, 변수, 클래스를 모아놓은 파일을 모듈이라 한다. C언어에서의 라이브러리와 유사한 개념으로 생각할 수 있다.
확장자를 .py로 저장한 파이썬 소스 파일은 모듈이 될 수 있다. 한 파이썬 파일을 다른 모듈로 import하면 해당 파일 내의 함수를 사용할 수 있다.
예를 들어 func.py 파일을 import func
와 같이 import하면, func.fact(5)
처럼 사용할 수 있게 된다.
사용할 때마다 모듈의 이름을 기재하고 싶지 않다면, from func import fact
와 같이 함수를 가져오거나 fact = func.fact
로 함수를 변수에 저장하여 사용할 수 있다. 한 번에 여러 함수를 가져올 수 있으며, from func import *
를 통해 모든 함수를 가져올 수 있다.
이미 존재하는 대표적 모듈 몇 가지만 살펴보겠다.
(파이썬 모듈 참고 : https://docs.python.org/ko/3/py-modindex.html)
파이썬 객체 복사 시 두가지 방법이 존재하는데, 얕은 복사와 깊은 복사이다. 대입 연산자를 이용해 복사를 하는 경우, 이는 얕은 복사만 된다. 깊은 복사를 하려면 copy 모듈의 deepcopy()를 이용하면 된다.
https://docs.python.org/ko/3/library/copy.html#module-copy
keyword 모듈을 통해 파이썬의 키워드 정보를 알 수 있다.
https://docs.python.org/ko/3/library/keyword.html
난수 생성 시 사용하는 모듈로, 활용도가 높기 때문에 꼭 알아둘 필요가 있다.
정수 범위의 난수 생성 시 randint()에 구간을 인수로 주면 된다.
예를 들어 randint(1, 6)
은 1, 2, 3, 4, 5, 6 중 하나의 수를 무작위로 반환한다.
0에서 1사이의 난수를 반환한다. 매개변수가 없는 함수이다.
인자로 시퀀스를 전달하면, 주어진 시퀀스의 항목을 무작위로 반환한다.
시퀀스의 원소들을 무작위로 섞는다. 섞은 새로운 객체를 반환하는 것이 아니라 시퀀스 자체가 변경된다. 튜플의 경우 변경 불가능하므로 shuffle 함수를 적용할 수 없다.
https://docs.python.org/ko/3/library/random.html#module-random
os 모듈은 운영체제에 상관 없이 기본 기능을 다룰 수 있도록 한다.
getcwd(), 함수는 현재 디렉토리의 위치를 반환하며 chdir(path)는 디렉토리 위치 변경 시 사용된다.
listdir(path)는 해당 경로의 파일과 디렉토리 리스트를 반환한다.
listdir(".")
는 현재 디렉토리의 파일과 디렉토리 리스트를 반환한다.
https://docs.python.org/ko/3/library/os.html#module-os
명령어를 실행하는 함수로, 성공 시 0을 반환한다.
import os
os.system("calc") #계산기 실행
os.system("notepad") #메모장 실행
os.system("time") #현재 시간 출력 및 입력
파이썬 인터프리터에 대한 정보를 제공한다.
현재 설치되어있는 모듈을 보려면 sys.modules
를, 파이썬의 버전을 보려면 sys.version
을 입력하면 된다.
https://docs.python.org/ko/3/library/sys.html#module-sys
시간을 여러 형식으로 표현하기 위한 모듈이다.
time() 함수를 호출하면 실수가 반환되는데, 이는 1970년 1월 1일부터 지금까지의 시간을 초단위로 출력한 것이다.
예를 들어 파이썬 프로그램의 실행 시간을 알고 싶은 경우, 다음과 같은 문장을 코드의 처음과 끝에 작성하면 된다.
start = time.time()
#코드 작성
end = time.time()
print(end - start)
asctime() 함수는 현재 날짜와 시간을 문자열 형태로 반환한다.
sleep() 함수는 현재 동작 중인 프로세스를 지정된 시간만큼 정지시킨다.
다음 코드의 주석부분이 있을 때와 없을 때 차이를 확인해보자.
import time
for i in range(10, 0, -1):
print(i, end = " ")
#time.sleep(1)
https://docs.python.org/ko/3/library/time.html#module-time
달력을 출력하는 여러 함수가 존재한다.
입력받은 달의 달력 출력
import calendar
print(calendar.month(2023, 6))
입력받은 해의 달력 출력
import calendar
print(calendar.prcal(2023))
https://docs.python.org/ko/3/library/calendar.html#module-calendar