본문 바로가기

python

(14)
while 순환보다 for 순환 사용하기 가능하다면 파이썬다운 순환인 for item in iterable을 사용하는 것이 좋다. 순환을 작성할 때 for와 while 중 선택해야 하는 경우가 종종 있다. 물론 두 가지 모두 사용할 수 있다. 사용하는 언어가 무한 반복자(iterable)을 가지고 있다면 for만 사용해도 충분하다. while과 for 사이의 형식적 동일성에도 불구하고 일반적으로 while 순환보다 for 순환이 더 파이써닉하다고 느껴진다. 물론 많은 예외가 있지만 파이썬에서 순환을 사용할 때는 거의 전부라 해도 좋을 정도로 컬렉션이나 생성기 함수 (Generator Function), 생성기 순환 표현식 (Generator Expression), 사용자 정의 반복 가능 클래스와 같은 반복 가능 객체 사이를 순환하는 경우가 대부..
순환 중 객체 변형 순환 중인 객체를 변형시키면 안된다. 때로는 잘못된 결과가 발생하지 않고 순환을 벗어날 수도 있지만, 그래도 안좋은 습관이다. 여기서 주목해야 할 점은 일부 파이썬 객체가 불변(immutable)이라는 것이다. 예를 들어 str, bytes, tuple, frozenset 객체를 순환하는 경우 기본 컬렉션이 변형되는 문제가 발생하지 않는다. 그럼에도 불구하고 많은 파이썬 객체들은 가변(mutable)임과 동시에 반복 가능하다. 대표적으로 list, dict, set, bytearray 등이 있다. 순환 중인 객체를 변형시키려고 하면 여러 가지 면에서 문제를 일으킬 수 있다. my_set = {'h','e', 'l', 'l', 'o'}my_set = set(my_set)for i in my_set: ..
dict.key()로 순환하지 않기 dict.items()가 필요할 경우 dict.keys()로 순환하지 않기파이썬의 목록과 색인 위치와 값의 사상(mapping)을 거의 동일시하는 경우가 있다.더보기파이썬에서 "사상"이라는 용어는 일반적으로 "mapping" 또는 "association"의 의미로 사용됩니다. 이 개념은 특정 집합의 원소들 간의 관계를 정의하는 것입니다. 파이썬에서는 사상(mapping)을 보통 딕셔너리(dictionary)와 같은 데이터 구조로 구현합니다.여기서 색인 위치와 값의 사상을 거의 동일시하는 경우는, 목록(list)와 그 인덱스 간의 관계를 의미합니다. 목록(list)은 인덱스와 값 간의 직접적인 사상을 제공합니다. 즉, 목록의 각 인덱스는 해당 인덱스에 위치한 값을 가리킵니다. 이 경우, 인덱스는 사상의 "..
색인을 순환하는 대신 enumerate 사용하기 C에서 파생된 언어를 사용하는 개발자들은 목록이나 다른 데이터 구조를 순환할 때 대부분 색인 요소를 사용하는 경향이 있다. 하지만 이것은 일반적으로 파이썬답지 않은 순환 방법에 해당한다. 아래와 같은 코드는 일반적으로 코드의 악취로 간주된다.for i in range(len(items)): process(i, i[i]) 순환안에서 색인 위치를 전혀 사용할 필요가 없는데도 불구하고 색인을 사용하는 것은 좋은 방법이 아니다. 더 관용적인 사용 방식은 아래와 같이 단순하다.for i in items: process(None, item) 색인과 그에 연결된 항목을 모두 사용하는 경우가 비교적 흔한데, 이 경우 enumerate 함수를 사용하는 것이 훨씬 관용적이고 직관적이다.for i, idx in enumer..
python 네이버 금융 웹 스크래핑 웹 스크래핑 3 네이버 금융 스크래핑 네이버 주식 페이지에서 순위별로 각각의 콘텐츠들을 뽑아오는 것을 목표로 스크래핑하였다. 먼저 저번과 마찬가지로 이 웹페이지는 JS로 구성되어있기 때문에 개발자 도구 network 탭에서 이 페이지 접속할 때 받는 특정 response를 이용해서 cURL을 복사한다. 그 후 https://curl.trillworks.com/ 에서 cURL을 Python requests로 변환해준다. import requests headers = { 'authority': 'finance.naver.com', 'cache-control': 'max-age=0', 'sec-ch-ua': '"Google Chrome";v="89", "Chromium";v="89", ";Not A Brand..
파이썬 웹 스크래핑 웹 스크래핑하기 네이버 영화 사이트에 접속하여 영화의 제목들을 뽑아오는 것을 목표로 스크래핑을 하였다. 먼저 virtualenv 가상 환경에서 request와 BeatufulSoup 모듈을 설치한 후 진행하였다. import requests from bs4 import BeautifulSoup # response에 requests로 얻은 URL을 할당한다. response = requests.get('https://movie.naver.com/movie/running/current.nhn#') # soup에 BeautifulSoup모듈을 사용하여 URL을 텍스트로 변환하고 파싱한다. soup = BeauifulSoup(response.text, 'html.parser) 내가 스크랩하고 싶은 타겟이 HTM..
set과 frozenset 파이썬이 제공하는 다음과 같은 자료형들을 가리켜 ‘시퀀스 타입(sequence type)’이라 한다. 리스트 : list 클래스의 객체 튜플 : tuple 클래스의 객체 레인지 : range 클래스의 객체 문자열 : str 클래스의 객체 이들에겐 저장된 값의 순서 정보가 존재한다는 특징이 있다. 다음 자료형을 가리켜 ‘매핑 타입(mapping type)’이라 한다. 딕셔너리 : dict 클래스의 객체 매핑 타입은 본직적으로 저장된 값의 순서 또는 위치 정보를 기록하지 않는 자료형이다. 파이썬 3.7부터 저장된 값의 순서를 유지하기 시작했으나 그렇다고 본질이 바뀌지는 않는다. 때문에 이를 대상으로는 인덱싱이나 슬라이싱 연산이 불가능하다. 다음 두 자료형을 가리켜 ‘셋 타입(set type)’이라 한다. 셋..
dict & defaultdict 딕셔너리 새로운 키의 값을 저장할 때 해당 키가 존재하지 않는다면 오류가 발생한다. 그래서 그에 따른 처리를 미리 해 둘 필요가 있다. a = 'roboot' d = {} for k in a: if k in d: d[k] += 1 else: d[k] = 1 print(d) => {'r': 1, 'o': 2, 'b': 2, 't': 1} 위처럼 if ~ else 절을 이용하여 예외 처리가 가능하다. 그런데 이를 대신할 수 있는 방법 두 가지가 있다. setdefault 메서드와 defaultdict 함수이다. setdefault 메서드 a = 'robbot' d = {} for k in a: d[k] = d.setdefault(k, 0) + 1 print(d) => {'r': 1, 'o': 2, 'b': ..