[python] 파이썬에서 __future__ 란 무엇이며 어떻게 / 어떻게 / 어떻게 작동하며 어떻게 작동하는지

__future__파이썬 모듈에서 자주 나타납니다. 파이썬의 doc을__future__ 읽은 후에도 무엇이 무엇을 어떻게 사용 해야하는지 이해하지 못합니다 .__future__

누구든지 예를 들어 설명 할 수 있습니까?

__future__내가받은 기본 사용법에 관한 몇 가지 대답이 맞았습니다 .

그러나 __future__작동 방식 과 관련하여 한 가지 더 이해해야 합니다.

가장 혼란스러운 개념은 현재 python 릴리스에 향후 릴리스 기능이 포함되는 방법과 향후 릴리스의 기능을 사용하는 프로그램을 현재 버전의 Python에서 성공적으로 컴파일하는 방법입니다.

현재 릴리스에는 향후 잠재적 인 기능이 포함되어 있다고 생각합니다. 그러나 기능은 __future__현재 표준이 아니기 때문에 사용해야 만 사용할 수 있습니다 . 내가 옳은지 알려주세요.



답변

함께 __future__모듈의 포함, 천천히 호환되지 않는 변경 또는 새로운 키워드를 도입 그러한 사람들에 익숙 할 수 있습니다.

예를 들어, 컨텍스트 관리자를 사용 from __future__ import with_statement하려면 with키워드가 새롭고 더 이상 변수 이름으로 사용되어서는 안되므로 2.5에서 수행해야 했습니다 . 사용하기 위해서는 with파이썬 2.5 이상에서 파이썬 키워드로, 당신은 위에서 가져 오기를 사용해야합니다.

또 다른 예는

from __future__ import division
print 8/7  # prints 1.1428571428571428
print 8//7 # prints 1

내용이 없으면 __future__print문장이 모두 인쇄 1됩니다.

내부 차이점은 가져 오기가 없으면 메소드에 /맵핑 __div__()되지만 메소드와 함께 맵핑 __truediv__()됩니다. (어쨌든으로 //전화하십시오 __floordiv__().)

Apropos print: print3.x에서 함수가되어 키워드로서의 특수 속성을 잃습니다. 그래서 그것은 다른 길입니다.

>>> print

>>> from __future__ import print_function
>>> print
<built-in function print>
>>>


답변

당신이 할 때

from __future__ import whatever

당신은 실제로를 사용하지 않습니다 import 진술을 미래의 진술을 사용하고 있습니다. 실제로 해당 모듈을 가져 오지 않기 때문에 잘못된 문서를 읽고 있습니다.

미래의 진술은 특별합니다. 파이썬 모듈의 구문 분석 방식이 바뀌기 때문에 해야한다 파일의 맨 위에합니다. 파일의 단어 나 기호에 새로운 의미를 부여합니다. 문서에서 :

장래의 진술은 특정 모듈이 미래의 특정 파이썬 릴리스에서 사용할 수있는 구문 또는 의미를 사용하여 컴파일되어야한다는 컴파일러의 지시입니다. 미래의 진술은 호환되지 않는 언어 변경을 도입 한 이후 버전의 Python으로 쉽게 마이그레이션 할 수 있도록하기위한 것입니다. 기능이 표준으로 제공되기 전에 모듈별로 새로운 기능을 사용할 수 있습니다.

실제로 __future__모듈 을 가져 오려면

import __future__

평소와 같이 액세스하십시오.


답변

__future__ 프로그래머가 현재 인터프리터와 호환되지 않는 새로운 언어 기능을 활성화하는 데 사용할 수있는 의사 모듈입니다 . 예를 들어, 표현식은 11/4현재로 평가됩니다 2. 모듈이 실행 된 모듈이 다음을 실행하여 진정한 분할을 활성화 한 경우 :

from __future__ import division

식은로 11/4평가됩니다 2.75. __future__모듈 을 가져오고 변수를 평가하면 언어에 새 기능이 처음 추가 된시기와 기본 기능이되는시기를 확인할 수 있습니다.

  >>> import __future__
  >>> __future__.division
  _Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192)


답변

이전 버전의 Python을 사용하면서 최신 버전에 표시되는 기능을 사용하는 데 사용할 수 있습니다.

예를 들어

>>> from __future__ import print_function

print함수 로 사용할 수 있습니다 .

>>> print('# of entries', len(dictionary), file=sys.stderr)


답변

이미 훌륭한 답변이 있지만 그중 어느 것도 전체 목록을 다루지 않습니다. __future__ 현재 성명서에서 지원 .

간단히 말해, __future__문장은 파이썬 인터프리터가 언어의 새로운 기능을 사용하도록합니다.


현재 지원되는 기능은 다음과 같습니다.

nested_scopes

Python 2.1 이전에는 다음 코드에서 NameError가 발생했습니다 .

def f():
    ...
    def g(value):
        ...
        return g(value-1) + 1
    ...

from __future__ import nested_scopes이 기능을 허용 지시어가 활성화되어 있어야합니다.

generators

연속적인 함수 호출 사이의 상태를 저장하기 위해 아래와 같은 생성기 함수가 도입되었습니다.

def fib():
    a, b = 0, 1
    while 1:
       yield b
       a, b = b, a+b

division

클래식 나누기는 Python 2.x 버전에서 사용됩니다. 즉, 일부 구분 문은 합리적인 분할 근사값 ( “실제 구분”)을 반환하고 다른 분할 문은 바닥 ( “바닥 구분”)을 반환합니다. Python 3.0부터는 진정한 나눗셈이로 x/y, 바닥 나누기는x//y .

from __future__ import division지시문은 Python 3.0 스타일 구분을 사용하도록합니다.

absolute_import

괄호로 여러 import문장 을 묶을 수 있습니다. 예를 들면 다음과 같습니다.

from Tkinter import (Tk, Frame, Button, Entry, Canvas, Text,
    LEFT, DISABLED, NORMAL, RIDGE, END)

대신에:

from Tkinter import Tk, Frame, Button, Entry, Canvas, Text, \
    LEFT, DISABLED, NORMAL, RIDGE, END

또는:

from Tkinter import Tk, Frame, Button, Entry, Canvas, Text
from Tkinter import LEFT, DISABLED, NORMAL, RIDGE, END

with_statement

명령문 with을 키워드로 키워드에 추가하여 명령문 이 필요하지 않습니다 try/finally. 이것의 일반적인 용도는 다음과 같은 파일 I / O를 수행 할 때입니다.

with open('workfile', 'r') as f:
     read_data = f.read()

print_function:

style 문 print()대신 Python 3 괄호 스타일 함수 호출을 사용하도록 print MESSAGE합니다.

unicode_literals

bytes객체 의 리터럴 구문을 소개 합니다. 과 같은 진술 bytes('Hello world', 'ascii')은 간단히로 표현 될 수 있음을 의미한다 b'Hello world'.

generator_stop

StopIteration생성기 함수 내 에서 사용 된 예외 사용을 예외로 바꿉니다 RuntimeError.

위에서 언급하지 않은 또 다른 용도 __future__는 이전 버전을 사용하면 런타임 예외가 발생하므로 명령문에 Python 2.1 이상 인터프리터도 사용해야한다는 것입니다.


참고 문헌


답변

또는 “파이썬 v2.7이므로 파이썬 3에 추가 된 후에도 파이썬 v2.7에 추가 된 다른 ‘인쇄’기능을 사용하십시오. 따라서 내 ‘인쇄’는 더 이상 진술이되지 않습니다. (예 : print “message”) 그러나 기능 (예 : print ( “message”, options). 파이썬 3에서 코드를 실행할 때 ‘print’가 중단되지 않습니다. “

from __future__ import print_function

print_function은 python v3에서 동작하는 방식에 따라 새로운 ‘print’구현을 포함하는 모듈입니다.

자세한 설명은 다음과 같습니다. http://python3porting.com/noconv.html


답변

나는 매우 유용한 것으로 판명 용도 중 하나는이다 print_function에서__future__ 모듈입니다.

Python 2.7에서는 다른 인쇄 문의 문자를 공백없이 동일한 줄에 인쇄하기를 원했습니다.

끝에 쉼표 ( “,”)를 사용하여 수행 할 수 있지만 추가 공간도 추가합니다. 위의 진술은 다음과 같이 사용될 때

from __future__ import print_function
...
print (v_num,end="")
...

v_num공백없이 한 줄로 각 반복 의 값을 인쇄합니다 .