프리렉 - FREELEC
http://freelec.co.kr/book/catalogue_view.asp?UID=134
이강성저
슬라이싱을 이용한 치환인 경우에, 우변에는 시퀀스 자료형이 공급되어야 한다.
L = [1,2,3,4,5]
L[1:3] = [100]
L
L = [1,2,3,4,5]
L[1:3] = 100 # 리스트나 튜플 등의 시퀀스 자료형을 공급해야 한다.
L
L = [1,2,3,4,5]
L[1:3] = 100, # 튜플도 가능
L
L = [1,2,3,4,5]
L[1:3] = 'a' # 문자열도 가능
L
id() 내장 함수를 이용하면 객체의 id(메모리 주소)를 확인할 수 있다. 다음 두 결과는 같은 메모리를 참조하고 있다는 것을 설명한다.
a = [1,2,3]
id(a)
a[:] = [4, 5, 6]
id(a)
s = 'Sometimes I feel like a motherless child'
# 가) 단어의 순서 바꾸기
list(reversed(s.split()))
' '.join(reversed(s.split()))
# 나) 문자열의 순서 뒤집기
s[::-1]
# 다) 공백을 없애기
''.join(s.split())
a = [1,2,3]
b = a * 3
c = [a] * 3
# 가) b와 c의 차이
print (b)
print (c)
# 나)
a[0] = 0
print(b)
print(c)
# 다)
# b는 a가 참조하는 레퍼런스를 복사했으므로 a의 변화와 관계없다
# c는 a레퍼런스를 복사했으므로 a의 변화에 반응한다.
# 라)
a = [1,2,3]
c = [a[:]] * 3 # 레퍼런스 전체 복사한 후 반복
print(c)
a[0] = 100
print(c) # a의 변화와 관계 없다
c[0][0] = 100 # 그러나 항목들은 공유된다.
print(c)
# 마)
a = [1,2,3]
c = [a[:], a[:], a[:]]
print (c)
c[0][0] = 100 # 해당 항목에만 영향을 미친다.
print(c)
L = list(range(10))
L
L.sort(key=lambda a: a%5)
L
a = [1]
b = [2]
a.append(b)
b.append(a)
# 가)
'''
a --> [1, b]
b --> [2, a]
'''
# 나)
print(a)
print(b)
# 다)
import sys
print (sys.getrefcount(a)) # 현재 getrefcount() 함수의 참조를 포함하여 3
# 라)
del b
print(sys.getrefcount(a)) # 여전히 3이 맞다. b는 직접 a 를 가르키지 않았기 때문이다.
# 마)
'''
a --> [1, b]
[2, a]
'''
# 바)
del a
이제 객체를 참조할 수는 없지만, 내부에서는 상호 참조되고 있으므로 제거되지 않고 남아있다.
sl = ['Spam', 'egg', 'Ham']
sl.sort(key=lambda a:a.lower())
sl
s = ' first item : second item : third item '
L = []
for ele in s.split(':'):
L.append(ele.strip())
L
[ele.strip() for ele in s.split(':')]
import re
s = 'Python is a programming language that lets you work more quickly and integrate your systems more effectively. You can learn to use Python and see almost immediate gains in productivity and lower maintenance costs.'
s2 = re.sub('[^0-9a-zA-Z]', ' ', s) # 숫자, 영문을 제외한 기호는 공백으로 대치
s2
words = s2.split() # 공백 단위 분리
words
words.sort(key=lambda a:len(a)) # 문자열 길이에 따른 정렬
words
import os
import glob
glob.glob('../src/ch15/*.py') # 현재 디렉토리에 파일이 없어서.. 다른 디렉토리 파일 목록으로 대치합니다.
for fpath in glob.glob('../src/ch15/*.py'):
if os.path.getsize(fpath) > 500:
print (fpath, os.path.getsize(fpath))
import os
for fpath in glob.glob('../src/ch15/*.py'): # 현재 디렉토리에 파일이 없어서.. 다른 디렉토리 파일 목록으로 대치합니다.
print (fpath, os.path.getmtime(fpath)) # 일단 수정 시간들을 출력해보자. 시간은 숫자로 나온다
import time
time.time() # 현재 시간을 얻는 법
# 24시간 전 시각
time.time() - 24 * 60 * 60
# 종합
import os
reftime = time.time() - 24 * 60 * 60
for fpath in glob.glob('../src/ch15/*.py'): # 현재 디렉토리에 파일이 없어서.. 다른 디렉토리 파일 목록으로 대치합니다.
if os.path.getmtime(fpath) > reftime:
print (fpath, os.path.getmtime(fpath)) # 일단 수정 시간들을 출력해보자. 시간은 숫자로 나온다
긴 옵션의 처리 방법을 공부하고 다음을 풀어 보자. 옵션 처리는 argparse.ArgumentParser()
를 이용한다. 명령줄에 URL 주소를 입력하면 해당 URL의 HTML 문서를 화면에 출력하는 프로그램을 작성해 보자. URL에서 HTML 문서를 가져오는 것은 다음과 같은 코드를 이용한다.
from urllib.request import urlopen
import sys
def getpage(url):
f = urlopen(url)
return f.read( )
text = getpage('http://python.org')
사용 방법은 다음과 같다. 출력 파일을 지정하지 않으면 output.html로 저장한다.
python getpage.py --output python.org.html http://python.org
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('url')
parser.add_argument('--output', default='output.html');
args = parser.parse_args('--output abc.html http://python.org'.split())
args
args.url
args.output
# 종합
from urllib.request import urlopen
import argparse
import sys
def getpage(url):
f = urlopen(url)
return f.read( )
parser = argparse.ArgumentParser()
parser.add_argument('url')
parser.add_argument('--output', default='output.html');
#args = parser.parse_args() # 명령행에서 실행하는 경우
args = parser.parse_args('--output abc.html http://python.org'.split()) # 임시 테스트
output = args.output
url = args.url
text = getpage(url)
len(text)