Program Tip

파이썬에서 __future__는 무엇에 사용되며 어떻게 / 언제 사용되며 어떻게 작동하는지

programtip 2020. 10. 2. 23:10
반응형

파이썬에서 __future__는 무엇에 사용되며 어떻게 / 언제 사용되며 어떻게 작동하는지


저를 포함한 사람들은 파이썬에 뭔가 호출 된 것이 있다는 것을 알고 있으며 __future__제가 읽은 꽤 많은 모듈에 나타납니다. 그리고 저와 같은 지루한 사람들 은 Python의 __future__doc을 읽은 후에도 왜 거기에 있는지, 어떻게 / 언제 사용 해야하는지 모릅니다 .

그래서 그것을 보여주는 예제와 함께 설명하는 사람이 있습니까?

기본 사용법 측면에서 모두 정확 해 보이는 몇 가지 답변을 빠르게 얻었습니다.

그러나 __future__작동 방식 을 더 자세히 이해하려면 다음을 수행하십시오.

이해하려고 할 때 혼란 스러웠던 한 가지 중요한 점을 깨달았습니다. 즉, 현재 파이썬 릴리스에 향후 릴리스에서 릴리스 될 내용이 어떻게 포함되어 있습니까? 그리고 미래의 파이썬 릴리스에서 새로운 기능을 사용하는 프로그램을 현재 파이썬 릴리스에서 어떻게 성공적으로 컴파일 할 수 있습니까?

이제 현재 릴리스에는 향후 릴리스에 포함될 몇 가지 잠재적 인 기능이 이미 포함되어 있습니다. 이것이 맞습니까? 하지만 기능은에서만 사용할 수 있습니다. __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문을 사용하지 않고 미래 문을 사용 합니다. 실제로 해당 모듈을 가져 오지 않기 때문에 잘못된 문서를 읽고 있습니다.

미래의 문장은 특별합니다-파이썬 모듈이 파싱되는 방식을 변경하기 때문에 파일의 맨 위에 있어야 합니다. 파일의 단어 나 기호에 새롭거나 다른 의미를 부여합니다. 문서에서 :

future 문은 특정 모듈이 지정된 향후 Python 릴리스에서 사용할 수있는 구문 또는 의미를 사용하여 컴파일되어야한다는 컴파일러에 대한 지시문입니다. future 문은 호환되지 않는 언어 변경을 도입하는 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
    ...

The from __future__ import nested_scopes directive will allow for this feature to be enabled.

generators:

Introduced generator functions such as the one below to save state between successive function calls:

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

division:

Classic division is used in Python 2.x versions. Meaning that some division statements return a reasonable approximation of division ("true division") and others return the floor ("floor division"). Starting in Python 3.0, true division is specified by x/y, whereas floor division is specified by x//y.

The from __future__ import division directive forces the use of Python 3.0 style division.

absolute_import:

Allows for parenthesis to enclose multiple import statements. For example:

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

Instead of:

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

Or:

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

with_statement:

Adds the statement "with" as a keyword in Python to eliminate the need for try/finally statements. Common uses of this are when doing file I/O such as:

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

print_function:

Forces the use of Python 3 parenthesis-style print function call instead of the print MESSAGE style print statement.

unicode_literals:

Introduces the literal syntax for the bytes object. Meaning that statements such as bytes('Hello world', 'ascii') can be simply expressed as b'Hello world'.

generator_stop:

Replaces the use of the StopIteration exception used inside generator functions with the RuntimeError exception.

One other use not mentioned above is that the __future__ statement also forces the use of Python 2.1+ interpreters since using an older version will throw a runtime exception.

References:


Or is it like saying "Since this is python v2.7, use that different 'print' function that has also been added to python v2.7, after it was added in python 3. So my 'print' will no longer be statements (eg print "message" ) but functions (eg, print("message", options). That way when my code is run in python 3, 'print' will not break."

In

from __future__ import print_function

print_function is the module containing the new implementation of 'print' as per how it is behaving in python v3.

This has more explanation: http://python3porting.com/noconv.html


One of the uses which I found to be very useful is the print_function from __future__ module.

In Python 2.7, I wanted chars from different print statements to be printed on same line without spaces.

It can be done using a comma(",") at the end, but it also appends an extra space. The above statement when used as :

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

This will print the value of v_num from each iteration in a single line without spaces.


Explicit is better than implicit

from __future__ import braces
  File "<stdin>", line 1
SyntaxError: not a chance

[Credit: @mdeous]


After Python 3.0 onward, print is no longer just a statement, its a function instead. and is included in PEP 3105.

Also I think the Python 3.0 package has still these special functionality. Lets see its usability through a traditional "Pyramid program" in Python:

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:
*
**
***
****

If we use normal print function, we won't be able to achieve the same output, since print() comes with a extra newline. So every time the inner for loop execute, it will print * onto the next line.

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

반응형