Python中的__future__是什麼,以及如何/什麼時候使用它以及如何工做

__future__常常出如今Python模塊中。 即便閱讀了Python的__future__文檔,我也不瞭解__future__是什麼__future__以及如何/什麼時候使用它。 html

有人能夠舉例說明嗎? node

關於我收到的__future__的基本用法的一些答案彷佛是正確的。 python

可是,我還須要瞭解有關__future__工做原理的另外一件事: 程序員

對我來講,最使人困惑的概念是當前的python版本如何包含將來版本的功能,以及如何使用當前版本的Python成功地編譯使用將來版本的功能的程序。 函數

我猜測當前版本包含了未來的潛在功能。 可是,這些功能僅可經過使用__future__來使用,由於它們不是當前標準。 讓我知道我是否正確。 spa


#1樓

仍是說「因爲這是python v2.7,因此請使用在python 3中添加後也已添加到python v2.7中的那個不一樣的'print'函數。所以,個人'print'將再也不是語句(例如,打印「 message」),但具備功能(例如,print(「 message」,選項)。這樣,當個人代碼在python 3中運行時,「 print」不會中斷。」 code

htm

from __future__ import print_function

print_function是包含「 print」的新實現的模塊,具體取決於python v3中的行爲。 對象

這有更多解釋: http : //python3porting.com/noconv.html ci


#2樓

__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)

#3樓

我發現很是有用的用途之一是__future__模塊中的print_function

在Python 2.7中,我但願未來自不一樣打印語句的字符打印在同一行上而沒有空格。

能夠在最後使用逗號(「,」)來完成此操做,可是它還會附加一個額外的空間。 上面的語句用做:

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

這將在v_num打印每次迭代中的v_num值, v_num帶空格。


#4樓

從Python 3.0開始,print再也不只是一個語句,而是一個函數。 幷包含在PEP 3105中。

我也認爲Python 3.0包仍然具備這些特殊功能。 讓咱們經過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:
*
**
***
****

若是咱們使用普通的打印功能,將沒法得到相同的輸出,由於print()帶有額外的換行符。 所以,每次執行內部for循環時,它將在下一行上打印*。


#5樓

已經有一些不錯的答案,可是沒有一個能解決__future__語句當前支持的內容的完整列表。

簡而言之, __future__語句會強制Python解釋器使用該語言的更新功能。

當前支持的功能以下:

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

在Python中添加語句「 with」做爲關鍵字,以消除對try/finally語句的須要。 在執行文件I / O時,一般的用法是:

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

print_function

強制使用Python 3括號樣式的print函數調用,而不是print MESSAGE樣式的打印語句。

unicode_literals

介紹bytes對象的文字語法。 這意味着諸如bytes('Hello world', 'ascii')語句能夠簡單地表示爲b'Hello world'

generator_stop

將生成器函數內部使用的StopIteration異常的使用替換爲RuntimeError異常。

上面未說起的另外一個用途是__future__語句還強制使用Python 2.1+解釋器,由於使用較舊的版本將引起運行時異常。

參考文獻:

相關文章
相關標籤/搜索