코드 실행 시간 재기
start = timeit.default_timer()
end = timeit.default_timer()
모듈과 패키지
모듈
파이썬 파일은 각각 하나의 모듈로 취급되며, 실행이나 함수의 정의, 단순 변수의 모음 등등 여러 역할을 한다.
*모듈 단위에서 상수는 대문자로 표시한다.
모듈 불러오기(import)
모듈을 import할 때 실행하는 코드까지 import가 되어 저절로 실행이 된다.
어떤 모듈이 실행되는지 알려면 __name__을 이용하면 된다. __name__은 모듈의 전역변수에서 확인할 수 있다.
import를 할 때마다 import된 모듈의 실행을 막기위해서 __name__가 __main__ 이라는 이름을 가질 때만 실행하도록 코드를 짜면된다.
네임스페이스(Namespace)
각 모듈은 독립된 네임스페이스를 가진다. 메인으로 사용되고 있는 모듈이 아닌 import된 모듈의 경우, 해당 모듈의 네임스페이스를 사용해 모듈 내부의 데이터에 접근한다.
–
import 모듈
을 하게 되면 그 모듈의 모든 함수를 불러오게 되고 모듈.함수
이런 식으로 코드를 입력해야 작동한다.
from 모듈명 import 함수
를 이용하면 모듈 이름을 생략하고 함수만 입력해도 사용가능하다.
–
from 모듈명 import *
을 사용하여 모든 함수를 불러올 수 있지만 권장되는 방법은 아니다. 불필요한 함수까지 불러오게 되기 때문이다.
__all__ = ( ‘play_game’, )
이린 식으로 필요한 함수만 정의만 할 수 있다.
클래스(class)
객체지향 프로그래밍
파이썬의 모든것은 객체이며, 객체를 사용할 때는 변수에 해당 객체를 참조(Reference)시켜 사용한다.
객체는 변수와 함수를 가지며, 특별히 객체가 가진 변수와 함수는 각각 속성(attribute)
과 메서드(method)
라고 부른다.
객체는 어떠한 타입, 즉 특정한 클래스의 형태를 가진 인스턴스를 나타낸다.
'안녕하세요'
이 객체는 str형의 클래스를 가진 인스턴스
정규표현식(Regular Expressions)
특정한 패턴에 일치하는 복잡한 문자열을 처리할 때 사용하는 기법. 모듈 re를 사용함
복잡하거 자주 사용되는 패턴은 미리 컴파일을 사용하여 속도를 늘릴 수 있다(나중에 다시 다룸)
match: 시작부터 일치하는 패턴 찾기
Lux로 시작하는 패턴 찾기
import re
lux = 'Lux, the Lady of Luminosity'
result = re.match('Lux', lux)
결과 : [‘Lux’]
Lady로 끝나는 패턴 찾기
import re
lux = 'Lux, the Lady of Luminosity'
result = re.match('.*Lady', lux)
결과 : [‘Lux, the Lady’]
search: 첫 번째 일치하는 패턴 찾기
처음으로 나타나는 한 개만 찾기
import re
lux = 'Lux, the Lady of Luminosity'
result = re.search('Lady', lux)
결과 : Lady
findall: 일치하는 모든 패턴 찾기
import re
lux = 'Lux, the Lady of Luminosity'
result = re.findall('y.?.?', lux)
결과 : [‘y o’, ‘y’]
오늘 제일 헷갈렸던 부분 .?.?
.?
1글자가 더 올 수도 있고 안올 수도 있고
.?.?
1글자가 더 오거나, 2글자가 더 오거나 안오거나
..?
일단 1글자는 더 와야하고 그 뒤에 1글자가 오거나 안오거나
오케이 이해했닿
split: 패턴으로 나누기
import re
lux = 'Lux, the Lady of Luminosity'
result = re.split('o', lux)
결과 : [‘Lux, the Lady ‘, ‘f Lumin’, ‘sity’]
sub: 패턴 대체하기
import re
lux = 'Lux, the Lady of Luminosity'
result = re.sub('o', '!', lux)
결과 : ‘Lux, the Lady !f Lumin!sity’
정규표현식의 패턴 문자
패턴 | 문자 |
---|---|
\d | 숫자 |
\D | 비숫자 |
\w | 문자 |
\W | 비문자 |
\s | 공백 문자 |
\S | 비공백 문자 |
\b | 단어 경계 |
\B | 비단어 경계 |
각 출력가능한 패턴 문자 확인
import string
printable = string.printable
re.findall('\d', printable)
정규표현식의 패턴 지정자
패턴 | 의미 |
---|---|
abc | 리터럴 abc |
(expr) | expr |
expr1 | expr2 | expr1 또는 expr2 |
. |
\n 을 제외한 모든 문자 |
^ |
소스문자열의 시작 |
$ |
소스문자열의 끝 |
expr? |
0 또는 1회의 expr |
expr* |
0회 이상의 최대 expr |
expr*? |
0회 이상의 최소 expr |
expr+ |
1회 이상의 최대 expr |
expr+? |
1회 이상의 최소 expr |
expr{m} |
m회의 expr |
expr{m,n} |
m에서 n회의 최대 expr |
expr{m,n}? |
m에서 n회의 최소 expr |
[abc] | a or b or c |
[^abc] | not (a or b or c) |
expr1(?=expr2) | 뒤에 expr2가 오면 expr1에 해당하는 부분 |
expr1(?!expr2) | 뒤에 expr2가 오지 않으면 expr1에 해당하는 부분 |
(?<=expr1)expr2 | 앞에 expr1이 오면 expr2에 해당하는 부분 |
(?<!expr1)expr2 | 앞에 expr1이 오지 않으면 expr2에 해당하는 부분 |
Comments