IT이야기

Python에서 __future_는 무엇에 사용되며 언제 어떻게/사용할 것인지, 그리고 어떻게 작동하는지.

cyworld 2022. 3. 17. 21:29
반응형

Python에서 __future_는 무엇에 사용되며 언제 어떻게/사용할 것인지, 그리고 어떻게 작동하는지.

__future__Python 모듈에 자주 나타난다.나는 무엇을 이해할 수 없다.__future__Python's doc을 읽고 나서도 언제 어떻게/사용할 것인가에 대한 것이다.

누가 예를 들어 설명해줄 수 있니?

의 기본 용도에 관한 몇 가지 대답__future__내가 받은 것이 맞는 것 같았다.

하지만, 나는 어떻게 해야 하는지에 대해 한 가지 더 이해할 필요가 있다.__future__작업:

나에게 가장 혼란스러운 개념은 현재의 파이썬 릴리스에 미래의 릴리즈를 위한 기능이 어떻게 포함되어 있는지, 그리고 향후 릴리즈의 기능을 이용한 프로그램이 파이썬의 현재 버전에서 어떻게 성공적으로 컴파일될 수 있는지에 대한 것이다.

현재 릴리즈는 미래의 잠재적 기능과 함께 패키징되어 있을 것으로 추측한다.단, 이 기능은 다음을 통해서만 사용할 수 있다.__future__왜냐하면 그것들은 현재의 표준이 아니기 때문이다.내가 맞으면 알려줘.

와 함께__future__모듈의 포함으로, 당신은 새로운 키워드를 도입하거나 호환되지 않는 변경에 서서히 익숙해질 수 있다.

예를 들어, 컨텍스트 관리자를 사용하려면from __future__ import with_statement2.5에 다음과 같이with키워드는 새로운 것이었고 더 이상 변수 이름으로 사용되어서는 안 된다.사용하기 위해withPython 2.5 이상에서 Python 키워드로, 위에서 가져오기를 사용해야 한다.

또 다른 예는 다음과 같다.

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

다음이 없는__future__ 다 먹다print문장이 인쇄될 것이다.1.

내부적인 차이점은 그 수입 없이는/ .__div__()방법은, 그 동안,__truediv__()사용된다.(어쨌든,//전화를 하다__floordiv__().)

아프로포스print:print3.x에서 함수가 되어 키워드로서의 특수성을 상실한다.그래서 그것은 반대 방향이다.

>>> print

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

할 때

from __future__ import whatever

당신은 실제로 그것을 사용하고 있지 않다.import진술, 하지만 미래 진술.당신은 그 모듈을 실제로 수입하는 것이 아니기 때문에 잘못된 문서를 읽고 있다.

미래의 문장은 특별하다. Python 모듈의 구문 분석 방법을 변경하므로 파일 맨 위에 있어야 한다.그것들은 당신의 파일에 있는 단어나 기호에 새로운 혹은 다른 의미를 부여한다.문서에서:

미래 문장은 특정 모듈을 향후 Python의 특정 릴리스에서 사용할 수 있는 구문 또는 의미론을 사용하여 컴파일러에 대한 지시사항이다.미래의 진술은 언어에 양립할 수 없는 변경을 도입하는 파이썬의 미래 버전으로의 마이그레이션을 용이하게 하기 위한 것이다.그것은 기능이 표준이 되는 릴리즈 전에 모듈 단위로 새로운 기능을 사용할 수 있게 한다.

이 실제로 를으로 을(乙을 수입하고 .__future__ domodule, just do

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)

이미 몇 가지 훌륭한 해답은 있지만, 그 중 어느 것도 그 해답의 완전한 목록을 다루고 있는 것은 없다.__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

Classic division은 Python 2.x 버전에서 사용된다.일부 분할 문구는 분할의 합리적인 근사치("참 분할")를 반환하고 다른 분할 문구는 바닥("바닥 분할")을 반환한다는 것을 의미한다.은 Python 3. true division은 True division이다.x/y, 층분할은 에 의해 지정된다.x//y.

from __future__ import division지시문은 파이톤 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를 할 때 입니다일반적으로 다음과 같은 파일 I/O를 수행할 때 사용된다.

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

print_function:

3 괄호 Python 3 의 을 print() print MESSAGE문구를 쓰다

unicode_literals

『대한』의 한다.bytes이의를 제기하다다음과 같은 문구를 의미한다.bytes('Hello world', 'ascii')라고 간단히 표현할 수 있다.b'Hello world'.

generator_stop

의 사용을 대체한다.StopIteration에서 제너레이터 기능 내부에 사용되는 예외RuntimeError예외의

위에서 언급되지 않은 다른 용도는 다음과 같다.__future__또한 이전 버전을 사용하면 런타임 예외가 발생하기 때문에 python 2.1+ 인터프리터를 사용해야 한다.


참조

그것은 이전 버전의 파이썬을 가지고 있는 동안 새로운 버전에 나타날 기능을 사용하는 데 사용될 수 있다.

예를 들면

>>> from __future__ import print_function

사용할 수 있도록 허락할 것print함수로서:

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

아니면 "이것은 python v2.7이니, python v2.7에도 추가된 다른 '프린트' 기능을 파이선 3에 추가한 후에 사용하십시오.그래서 나의 '프린트'는 더 이상 문장이 아니라 기능(예: "메시지" 인쇄, "메시지" 옵션)이 될 것이다.그래야 내 코드가 파이톤 3에서 실행될 때 '프린트'는 깨지지 않을 것이다."

from __future__ import print_function

print_function은 python v3에서 동작하는 방식에 따라 'print'의 새로운 구현을 포함하는 모듈이다.

여기에 더 많은 설명이 있다: http://python3porting.com/noconv.html

내가 매우 유용하다는 것을 알게 된 용도 중 하나는 바로 그 용법이다.print_function로부터__future__모듈

Python 2.7에서는 서로 다른 인쇄 문장의 char를 공백 없이 같은 선에 인쇄하기를 원했다.

마지막에 콤마(")"를 사용하여 할 수 있지만, 여분의 공간을 추가하기도 한다.다음과 같이 사용할 경우 위의 문장이 표시됨:

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

이것은 다음 값을 인쇄할 것이다.v_num각 반복에서 공백 없이 한 줄로 반복한다.

__future__ 파이톤 모듈이다.수입명세서를 분석하고 그들이 수입하는 모듈을 찾을 것으로 예상되는 기존 도구들을 혼동하지 않기 위해 추가되었다.버전 2.1에 추가되어 버전 2.1 이전에 사용할 경우 가져오기가 실패함.

이제 다음 코드를 참조하십시오.

>>> from __future__ import division
>>> division
_Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 131072)

사단은 의 형식으로 돌아왔다._Feature(OptionalRelease, MandatoryRelease, CompilerFlag). OptionalRelease필수 릴리스는 모두 다음과 같은 형식의 5-tules이다.

(
 PY_MAJOR_VERSION, # the 2 in 2.1.0a3; an int
 PY_MINOR_VERSION, # the 1; an int
 PY_MICRO_VERSION, # the 0; an int
 PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" or "final"; string
 PY_RELEASE_SERIAL # the 3; an int
)

따라서 우리의 경우, OptionalRelease는 2.2.0a2이고, 필수 Release는 3.0.0a0이다.

OptionalRelease는 기능이 수락된 첫 번째 릴리즈를 알려준다.

의무 릴리즈는 해당 기능이 언어의 일부가 될 것인지 또는 해당 기능이 언어의 일부가 된 시기를 예측한다. 그 이후 릴리스에서 모듈은 해당 기능을 사용하기 위해 더 이상 미래 문구를 필요로 하지 않지만 이러한 가져오기를 계속 사용할 수 있다.필수 릴리즈가 없음이면 계획된 기능이 삭제된다.

컴파일러플래그는 (비트필드) 플래그로서, 동적으로 컴파일된 코드에서 형상을 활성화하기 위해 내장 함수 컴파일()에 네 번째 인수를 통해 전달되어야 한다.이 플래그는 _Feature 인스턴스의 컴파일러_flag 속성에 저장된다.

Python 3.0 이후 인쇄는 더 이상 단순한 문장이 아니라 기능이다.그리고 PEP 3105에 포함되어 있다.

또한 나는 파이썬 3.0 패키지가 여전히 이러한 특별한 기능을 가지고 있다고 생각한다.Python의 전통적인 "Pyramid 프로그램"을 통해 그 사용성을 확인해보자.

from __future__ import print_function

class Star(object):
    def __init__(self,count):
        self.count = count

    def start(self):
        for i in range(1,self.count):
            for j in range (i): 
                print('*', end='') # PEP 3105: print As a Function 
            print()

a = Star(5)
a.start()

Output:
*
**
***
****

일반적인 인쇄 기능을 사용하면 인쇄()에 추가 뉴라인이 함께 제공되기 때문에 동일한 출력을 얻을 수 없을 것이다.그래서 안쪽의 루프가 실행될 때마다 다음 줄에 *를 인쇄할 것이다.

참조URL: https://stackoverflow.com/questions/7075082/what-is-future-in-python-used-for-and-how-when-to-use-it-and-how-it-works

반응형