簡體   English   中英

如何為python 3.0的僅關鍵字參數導入__future__?

[英]how to import __future__ for keyword-only argument of python 3.0?

python2.6中的以下代碼拋出語法錯誤

>>> def f(a,*args,c):
  File "<stdin>", line 1
    def f(a,*args,c):
                  ^
SyntaxError: invalid syntax

但是這種語法在python3.0中是有效的。 我想知道我應該在我的解釋器中導入什么才能使其工作。 即。 from import __future__ ????

為了導入print function 3.0,我會from __future__ import print_function

同樣,這種定義在2.6中無效

def f(a,*b,c=5,**kwargs):

雖然它在3.0中是合法的

Python的3編譯器的這一功能還沒有被移植到Python 2.x的

from __future__ import開關沒有任何魔法來啟用它,您唯一的選擇是升級到Python 3.x.

您的第二個功能可以定義為:

def (a, *b, **kwargs):
   c = kwargs.pop('c', 5)

兼容Python 2。

PEP 3102中討論了新語法,它在Python 2.x中確實無效。

但是,您可以手動從**kwargs獲取關鍵字參數:

def f(a, *b, **kwargs):
    if 'c' in kwargs:
        pass

另一種方法是升級到Python 3.x.

另一種模仿僅限關鍵字參數的方法是:

def f(a, *args, **kwds):
    b = kwds.get('b', 42) # 42 being the default for b

如果你不想確保沒有傳遞未經請求的參數,你可以使用pop代替:

def f(a, *args, **kwds):
    b = kwds.pop('b', 42)

    assert not kwds # after we've popped all keywords arguments kwds should be empty

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM