콘텐츠로 건너뛰기
Home » Development » Python » 페이지 9

Python

파이썬 yield from – 다른 제너레이터에게 위임하기

파이썬에서는 어떤 함수 내부에 yield 키워드가 사용됐다면, 이 함수를 무조건 제너레이터 함수로 본다. 제너레이터 함수는 제너레이터를 만드는 함수이고, 다시 제너레이터는 어떤 값을 필요한 만큼 반복적으로 만들어내는 객체이다. 제너레이터는 일반 함수와 비슷하게 생겼지만, 함수가 return 구문을 만나면 실행이 끝나버리는데 비해, 제너레이터는 yield 구문에서 값을 외부로 내보낸 후 “일시정지” 상태가 되었다가 필요할 때 다시 실행 흐름을 이어나갈 수 있다. 필요에 따라서는 일시 정지한 제너레이터를 다시 깨울 때 값을 내부로 전달할 수 있는데, 이런 특징을 활용하면 함수를 띄워놓고 필요한 시점에 반복적으로 값을 집어넣었다가… 더 보기 »파이썬 yield from – 다른 제너레이터에게 위임하기

(Python) 데이터를 입력받는 방법을 유연하게 생각해보기

컴퓨터 프로그램은 사실상 하나의 함수와 같다. (그래서 많은 프로그램은 실행자체가 main() 과 같은 함수의 호출이기도 하다.) 프로그램은 입력장치로부터 데이터를 읽어들이고, 이 소스데이터를 가공하여 결과를 만들고, 이를 출력한다. 마치 어떤 프로그램의 실행과정은 일종의 쥬스메이커와 같다고 볼 수 있다. 과일(입력될 데이터)을 투입구에 밀어넣고 동작 버튼을 누르면 기계속으로 들어간 과일이 잘리고 눌려서 과즙이 되고, 그것이 노즐을 통해서 퐁퐁 흘러나와 컵에 담기는데, 맛있는 쥬스 대신에 데이터가 흘러나온다는 점만 다를 뿐 둘의 흐름은 똑같다.

더 보기 »(Python) 데이터를 입력받는 방법을 유연하게 생각해보기

파이썬의 반복문과 iterable에 대해

리스트, 튜플, 문자열, 사전의 공통점은? 모두 for … in 문에 사용할 수 있다는 점이다. 리스트는 for 문을 통해서 개별 원소에 대한 반복 작업을 할 수 있는데, 튜플과 문자열 역시 이와 똑같은 동작을 수행하며 사전의 경우에는 사전 내의 각 키에 대해서 순회하는 기능을 제공한다. 파이썬에서는 이와 같이 for … in 구문을 통해서 반복이 가능한 타입들을 묶어서 iterable이라고 부르는데, 이는 파이썬의 기본 개념에서 매우 중요한 위치를 차지한다. for 문의 백스테이지에 대해 for 문은 일반적인 언어에서의 대표적인 반복문이다. C언어에서는 다음과 같이 쓰인다. 아래… 더 보기 »파이썬의 반복문과 iterable에 대해

터미널에 컬러로 문자열을 출력해보자 (Python)

터미널 상에 결과를 찍어주는 간단한 프로그램을 만들 때,  특정 단어나 문장에 색을 넣어 출력하고 싶을 때가 있다. 이를 위한 Colorama 라는 패키지도 따로 있기는 한데, 사실 터미널에서 색을 입혀서 출력하는 것은 ANSI 제어 문자를 이용해서 할 수 있는 부분이라 직접 만들어 보기로 한다.
더 보기 »터미널에 컬러로 문자열을 출력해보자 (Python)

Whats new in python 3.6

파이썬 3.6에서 달라지는 점

이번주 금요일1에 파이썬 3.6이 발표될 예정이다. 몇 가지 새로워지는 변경사항에 대해 살펴보자.

새 기능들

포맷 문자열 리터럴

str.format()을 사용하던 문자열 포맷팅이 f" ... " 리터럴로 사용할 수 있게 된다. 해당 리터럴 내에서는 { } 내에 현재 스코프의 변수를 이용해서 치환될 수 있다.

name = "John"
greet = f"He said his name is {name}"
print(greet) # "He said his name is John"
width = 10
precision = 4
value = decimal.Decimal("12.34567")
print(f"result: {value: {width}.{precision}}")
# "result: 12.35"
# ^^^^^ 5

더 보기 »Whats new in python 3.6

오일러 프로젝트 50

41은 소수이면서 다음과 같은 6개의 연속된 소수의 합으로도 나타낼 수 있습니다.

41 = 2 + 3 + 5 + 7 + 11 + 13

이것은 100 이하에서는 가장 길게 연속된 소수의 합으로 이루어진 소수입니다. 1000 이하에서는 953이 연속된 소수 21개의 합으로 가장 깁니다. 1백만 이하에서는 어떤 소수가 가장 길게 연속되는 소수의 합으로 표현될 수 있습니까?

http://euler.synap.co.kr/prob_detail.php?id=50
더 보기 »오일러 프로젝트 50

오일러 프로젝트 49

1487, 4817, 8147은 3330씩 늘어나는 등차수열입니다. 이 수열에는 특이한 점이 두 가지 있습니다. 세 수는 모두 소수입니다. 세 수는 각각 다른 수의 자릿수를 바꿔서 만들 수 있는 순열(permutation)입니다. 1자리, 2자리, 3자리의 소수 중에서는 위와 같은 성질을 갖는 수열이 존재하지 않습니다. 하지만 4자리라면 위엣것 말고도 또 다른 수열이 존재합니다. 그 수열의 세 항을 이었을 때 만들어지는 12자리 숫자는 무엇입니까?

http://euler.synap.co.kr/prob_detail.php?id=49
더 보기 »오일러 프로젝트 49

asyncio : 단일 스레드 기반의 Nonblocking 비동기 코루틴 완전 정복

asyncio에 의한 단일 스레드 병렬 작업

지난번 concurrent.futures를 소개한 글에서 파이썬 3에서부터 멀티스레딩/멀티프로세싱에 대해 새로 도입된 고수준 API에 대해 살펴봤다. 이 새로운 API는 함수 호출을 병렬로 처리하는 동작을 사용하기 쉽게 만들 뿐 아니라, 직접 스레드를 제어하는 것이 아닌 Future 객체를 사용함으로써 자바스크립트의 Promise 개념을 도입한 것으로 평가할 수 있다고 보았다.

새로운 병렬처리 API와 더불어 Future 클래스가 도입된 것이 파이썬 3.2였다. Future 개념의 도입은 스레드를 관리하고, 다른 스레드에서 돌아가는 작업에 대해서 리턴을 동기화하는 등의 작업들이 매우 골치아팠던 것을 그 자체를 객체로 래핑하면서 매우 우아하게 처리할 수 있었다. 이는 결국 비선형적인 제어 흐름과 관계된 코드를 작성하는 것이 더 이상 너저분한 작업이 아닐 수 있다는 가능성을 보였다.

다중 스레드 및 다중 프로세스에 대해서 Future를 적용하는 것이 성공적이었다면, 이는 단일 스레드에 대해서도 비동기 non-blocking 코드를 작성하는데에 동일한 Future 개념을 도입할 수 있지 않을까하는 것으로 아이디어가 옮겨갔다.

더 보기 »asyncio : 단일 스레드 기반의 Nonblocking 비동기 코루틴 완전 정복

파이썬에서 JSON을 사용하는 방법

JSON은 JavaScript Object Notation의 줄임말로, 기본적으로 키-값쌍의 포맷으로 구조화된 정보를 인코딩하는 규격이다. 예전에는 XML이 유연성을 근거로 많이 사용되었으나, XML 파서는 기본적으로 무겁고 비싸게 돌아가기 때문에, JSON이 등장하면서 API 관련한 쪽에서 급격히 JSON을 쓰는 쪽이 늘어나기 시작했다.

JSON 포맷은 JSON의 객체 리터럴 및 배열 리터럴을 그대로 사용하는 문법을 쓰는데, 이 포맷은 문자열을 키로 하는 파이썬의 사전(dictionary) 포맷과도 일치한다.  이에 따라 json API는 marshal이나 pickle과 유사하게 되어 있다. 기본적으로 엄격한 JSON 파일은 단일 루트 객체가 존재하며 그 내부에 여러 프로퍼티들을 갖는다. 단일 루트 객체는 사전이나 리스트 중 하나와 유사하며 json 모듈은 결국 사전/리스트를 문자열로 인코딩하거나 그 역의 처리를 하는 일을 한다.

더 보기 »파이썬에서 JSON을 사용하는 방법