일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- lambda
- len
- iNT
- Algorithm
- js
- list
- slice
- map
- decorator
- MAX
- join
- SQL
- FOR
- split
- or
- DART
- and
- 파이썬
- sum
- enumerate
- Python
- If
- count
- Sorted
- range
- 위코드
- WECODE
- index
- LOWER
- STR
- Today
- Total
목록나는 이렇게 학습한다/Language (51)
코드로 우주평화
range는 지정한 수의 범위만큼 반복을 돌릴 때 유용하게 쓰는 파이썬 내장함수이다. 주 사용법은 다음과 같다. >>> for i in range(5): print(i) 0 1 2 3 4 양수 5를 지정하였으므로 0부터 4까지 5번을 반복한다. 그렇다면 0과 음수를 지정하면 어떻게 될까? >>> for i in range(-3): print(i) >>> >>> for i in range(0): print(i) 안타깝지만 반복이 되지 않아 결과도 나오지 않는다. 그러면 음수와 0은 반복을 할 수 없는 것인가? 아니다. 이 둘도 반복할 수 있다. 다만 이 둘의 경우 범위를 명확히 지정해주어야 한다. >>> for i in range(-1,5): print(i) -1 0 1 2 3 4 위에 코드처럼 음수와 0..
결론 'Overriding'은 상속받은 내용을 덮어쓰기 'Overloading'은 다양한 형태의 인수로 동일한 함수를 실행하기 쉽게 이해하기위해 범위를 좁혀 말하자면 위와 같다고 할 수 있다. (실제는 좀 더 넓은 개념으로 생각하면 좋을 것 같다.) Overriding 예제 코드 # 부모 클래스 class ParentMoney: def introduce(self, name): self.money = 1000 self.name = name self.word = "어때 부럽지?" return f"내 이름은 {self.name}, {self.money}원을 가지고 있지. {self.word}" # 자식 클래스 class ChildMoney(ParentMoney): def introduce(self, name)..
GIL(global interpreter lock) 한 순간에 1개의 스레드만 유지하는 락 GIL은 본질적으로 한 스레드가 다른 스레드를 차단해서 제어를 얻는 것을 막음 멀티스레딩의 위험으로부터 보호(하나의 메모리를 공유하므로 오류로 인해 전체가 다운될 수 있음) 그러므로 파이썬은 스레드로 병렬성 연산을 수행하지 못함 파이썬 멀티 스레딩은 동시성을 사용하여 io bound 코드(네트워크)에서 유용하게 사용할 수 있음 하지만 동시성은 cpu bound 코드(연산만 있는)에서 이점이 없음 해결책 멀티 프로세싱으로 병렬성을 구현하여 효율을 높일 수 있음. 단, 프로세스끼리 메모리를 공유하지 않기 때문에 직렬화 역직렬화에 소요되는 비용이 큼 비교 실험 멀티스레딩 22초 멀티프로세싱 13초 (하단 비교 코드 첨부..
프로세스와 스레드 확인 os.getpid() : 현재 프로세스 아이디(PID)를 반환한다 threading.get_ident() : 현재 스레드의 식별자를 반환한다 print(f"{os.getpid()} process | {threading.get_ident()} url : {url}") 아래 실습 코드를 실행해보고 '싱글 스레드'와 '멀티 스레드'의 결과 값을 비교해보자 # 실습 코드 import requests import time import os import threading from concurrent.futures import ThreadPoolExecutor ''' concurrent.futures 모듈은 비동기적으로 콜러블을 실행하는 고수준 인터페이스를 제공합니다. 비동기 실행은 (Thre..
웹사이트 데이터 가져오기 1. session을 통해 url에 접속한다 2. request.get을 통해 데이터를 가져온다 3. session을 닫고 걸린 시간을 측정한다 * session을 간편하게 닫기 위해 with문을 사용했다. with문을 사용하면 with 블록을 벗어나는 순간 자동으로 close되어 편리하다. 4. 일반 코드와 코루틴 코드의 결과를 비교해본다 일반 코드의 경우(동기) >>> 15.04025387763977 초 ''' 동기로 코드를 작성할 경우 15.04025387763977 초 소요 ''' import requests import time def fetcher(session, url): with session.get(url) as response: return response.te..
루틴이란? 일련의 명령 흐름 (코드의 흐름) 메인 루틴 프로그램의 메인 코드의 흐름 서브 루틴 ( = 함수 ) 함수나 메서드 (메인 루틴을 보조하는 역할) 하나의 진입점과 하나의 탈출점이 있는 루틴 코루틴 서브루틴의 일반화된 형태 다양한 진입점과 다양한 탈출점이 있는 루틴 await에 의해 진입과 탈출점이 추가됨 비동기적 코드를 가능하게 함 await 은 어웨이터블 객체 앞에 사용한다 어웨이터블 객체는 코루틴, 태스크 및 퓨처를 의미한다 코루틴 함수 time.sleep() → X asyncio.sleep() → O 함수 정의 시 async 를 붙이는 경우 → O 태스크 객체 태스크를 예약할 때 사용 task1 = asyncio.create_task(func()) await task1 # 이렇식으로 코드 ..
엄청 어려운 게 나오면 어쩌나 했는데, 기초 문법 위주로 나와서 다행히 수월하게 풀 수 있었다. 하필 조용한 시험 도중에 배에서 꼬르륵 소리가 나서 좀 창피했음... 오늘의 교훈 >>> 시험 날에는 반드시 밥을 먹고 올 것! 자 그럼 문제 리뷰 시작~ 1번 문제 짝수인지 판별하는 함수 is_even을 작성 주세요. def is_even(num): # 아래 코드를 입력해주세요. if num % 2 == 0: a = "짝수 입니다." else : a = "짝수가 아닙니다." return a 주어진 인자를 2로 나누었을 때 0이면 '짝수 입니다', 0이 아니면 '짝수가 아닙니다.'로 리턴 2번 문제 팁과 세금을 제외한 식사값이 주어졌을때, 팁과 세금이 포함된 총 식사값을 반환하는 함수를 작성하세요. 세금은 9..
파이썬에 내장된 패키지나 모듈은 build-in modules에, pip 등으로 다운로드한 패키지나 모듈은 sys.path에 저장되기 때문에 쉽게 이름만으로 불러올 수 있지만, 직접 만든 로컬 패키지의 경우 '절대 경로', '상대 경로'에 따라 다음과 같은 import 에러 메시지를 만나게 될 수 있다. from .package import module2 >>> ImportError: attempted relative import with no known parent package #ImportError: 알려진 상위 패키지가 없는 상대 가져오기 시도 이 문제를 해결하기 위해 절대 경로와 상대 경로에 대해 알아보고 어떤 식으로 import 해야 하는 살펴보자. 우선 아래 처럼 project1 안에 주로 ..
sys sys는 파이썬에 포함되어 있는 Import 해야하는 모듈 sys는 built-in 되어 있으므로 bulit-in modules에서 찾을 수 있다. sys.module 파이썬이 모듈이나 패키지를 찾기위해 가장 먼저 확인하는 곳 딕셔너리구조 이미 import 되어있는 모듈과 패키지 저장함 새로 import 하는 모듈은 sys.modules 에서 찾을 수 없음 sys.path 가장 마지막으로 확인하는 장소 string 요소들을 가지고 있는 list. ex. ['/Users/song-eun-u/anaconda3/lib/python3.6', '~~'] sys.path에서도 모듈을 발견하지 못하면 ModuleNotFoundError 에러를 리턴 sys.module 과 sys.path 의 차이점 1. 찾는 ..
파이썬에는 여러 종류의 자료형이 있는데 그 중에서 Set, Dictionary, List, Tuple 자료형에 대한 차이점을 살펴보자. Set 과 Dictionary 의 차이 이 둘의 공통점은 다음과 같다. 중복값을 없애줌 {} 를 사용함 그렇다면 차이점은? Dict 는 Set 과 달리 키와 값이 있다! Set의 경우, 보통 list의 중복값 삭제용으로 사용하는 편이다. Dict 는 키워드로 값을 찾기 위해 사용한다. List, Tuple 의 차이 이 둘의 공통점은 다음과 같다. 어떠한 자료형이든 안에 값으로 저장할 수 있다. dict와 달리 키와 값을 가지지 않는다. (값으로만 저장) 안에 리스트나 튜플을 추가하여 다차원 리스트를 만들 수 있다. 중복된 값도 넣을 수 있다. 그렇다면 차이점은? list..