2018-01-22 TIL WPS 11.파이썬-모듈, 패키지, 클래스 그리고 정규표현식

코드 실행 시간 재기

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