대니킴의 TEKnology

__future__ 문은 무엇일까? 본문

언어 팁!/Python

__future__ 문은 무엇일까?

TEKnology 2019. 8. 3. 01:44

이번 글은 반드시 알아야 할 정도는 아니지만 알아두면 쓸모 있는(?) 파이썬계의 알쓸신잡을 지식을 알려드릴게요! 짧은 글이 되겠네요ㅎㅎ

프로그래밍을 하면서 저희는 종종 다른 사람들의 깃허브 페이지나 블로그에 방문하여 새로운 방법들을 배우고 여러 가지 영감을 얻어오고는 합니다. 그러면서 저희는 처음 배울 때에는 전혀 보지 못했던 프로그래밍 기법이나 구문들을 보고는 합니다. 그러면서 저희는 그것들을 찾아보고 새로 배우는 것이겠지요?? 파이썬으로 프로그래밍을 할 때에 그중 하나가 바로 __future___라는 임포트 형식일 것입니다.

다들 아시다시피 프로그래밍 언어들은 사용자들의 피드백에 따라 그 언어 안에 내장되어 있는 함수나 여러 기능들을 조금씩 바꾸어 가면서 진화해갑니다. 파이썬이라는 언어도 마찬가지이죠. 제가 처음 프로그래밍을 시작할 무렵인 2017년 중반만 해도 그 당시 파이썬의 최신 버전은 3.6.4 였습니다. 2년 밖에 지나지 않은 지금, 현재의 버전은 3.7.4이고 파이썬의 공식 홈페이지 (https://www.python.org/downloads/)에서 확인해보실 수 있듯이 여러 버전을 배포해 가며 그동안 아주 조금씩 바뀌어왔습니다. 그나마 파이썬3 버전들끼리는 대부분 호환이 되게끔 만들어져 있어서 python으로 쓰인 open source 코드들을 가져오더라도 그것이 3세대에 속하는 버전이라면 모두 동작은 하게 됩니다. 하지만 2세대와 3세대는 차이점은 꽤나 있습니다 (absolute_import, division, print_function, nested_scopes, generators, with_statement, unicode_literals, generator_stop, annotations) . 대표적인 예시는 print_fucntion입니다.

Python2는 print를 statement로서 간주하는 반면 Python3는 print를 function으로서 간주합니다. 따라서 두 버전에서 프린트 문은 아래와 같이 다르게 쓰입니다.

# In python version 2
print "hello world"

# From python version 3
print("hello world")

만약 여러분이 귀찮아서 새로운 버전으로 업데이트를 해주지 않았거나 또는 Tensorflow가 3.6에서만 동작해서 그 버전을 써야 하는 이유 특별한 이유로 인하여 구버전의 언어를 써야 하지만 최신 버전의 기능을 써야 하는 상황에서는 어떻게 해야 할까요? 이러한 문제점을 해결하기 위해 파이썬 개발자들은 우리가 흔히 모듈을 import 하듯이 __future__를 통해 상위 버전의 기능을 쓸 수 있도록 하였습니다. 아래가 그 예시랍니닷^^

from __future__ import absolute_import, division, print_function, 
				nested_scopes, generators, with_statement, unicode_literals

 코드 상단에 이렇게 써주시고 시작하시면 구버전에서도 future, 즉 미래 버전의 기능을 사용하실 수 있답니다!