2013-10-30 4 views
7

il seguente codice nel python2.6 tiri errore di sintassicome importare __future__ per l'argomento di sola parola di python 3.0?

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

ma questa sintassi è valido in python3.0. Vorrei sapere cosa devo importare nel mio interprete per farlo funzionare. ie. from import __future__ ????

per l'importazione print function di 3.0, farei from __future__ import print_function

simile questo defination non è valido in 2,6

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

mentre è legale in 3.0

risposta

17

Questa caratteristica del Python 3 compilatore ha non stato backported in Python 2.x.

Non è presente la magia from __future__ import per abilitarlo, l'unica opzione è l'aggiornamento a Python 3.x.

La seconda funzione potrebbe invece essere definita come:

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

per essere Python 2 compatibile.

+0

O ' c = kwargs.pop ('c', 5) '. –

+0

@BrianMcCutchon: molto meglio, sì. –

5

La nuova sintassi è discussa in PEP 3102 e in effetti non è valida in Python 2.x.

Tuttavia è possibile ottenere la parola chiave argomenti da **kwargs manualmente:

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

L'altra alternativa è quella di effettuare l'aggiornamento a Python 3.x.

1

Un altro modo per emulare parola chiave-only-argomenti è:

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

Se wan't per assicurarsi che nessun argomento non richieste vengono passate è possibile utilizzare pop invece:

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

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