2013-01-21 18 views
8

Vorrei una copia della funzione print chiamata debug. Come posso creare alias una funzione in Python?Alias ​​una funzione in Python

+4

'da __future__ print_function' importazione nella parte superiore del file farà Python 2 utilizzare la versione Python 3 di' print', in modo che si può fare 'debug = print'. – katrielalex

risposta

16

Si può semplicemente assegnare debug = print in Python 3.

In Python 2 print non è una funzione. Non c'è modo di darti una dichiarazione debug che funziona esattamente come print (print 1,, print 1 >> sys.stderr ecc.). Meglio che si può fare è scrivere un wrapper per la dichiarazione print:

def debug(s): 
    print s 

È anche possibile disabilitare la dichiarazione print e utilizzare la versione Python 3:

from __future__ import print_function 
debug = print 

Se si esegue questa operazione, non è possibile utilizzare la versione dell'istruzione (print x). Probabilmente è la strada da percorrere se non stai infrangendo alcun vecchio codice.

+0

Sto usando python 2. – Randomblue

5

In Python 2.x si può fare:

def debug(s): 
    print(s) 

In 3.x si può semplicemente utilizzare assegnazione:

debug = print 
+0

Non hai bisogno di paren dopo 'print' in Python 2. – rvighne

+3

Questo è vero, ma perché non tenerlo compatibile 2/3 dove puoi? –

3

si può solo definire una nuova funzione debug come:

def debug(text): 
    print text 
2

Dipende dalla versione di Python. Python 3 permette semplicemente di fare questo:

debug = print 

Tuttavia, le versioni più vecchie considerano print ad essere dotato di un parola chiave, in modo da avere ad avvolgerla in una propria funzione:

def debug(msg): 
    print(msg) 
2

Il def Il metodo ha il vantaggio che i traceback identificano più chiaramente l'alias. Questo potrebbe aiutare un utente che dice "Cosa c'è 'print'?" se usano solo debug (l'alias):

>>> def f(): 
... print x 
>>> g = f 
>>> g() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 2, in f 
NameError: global name 'x' is not defined 
>>> 
>>> def h(): 
... return f() 
... 
>>> h() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 2, in h 
    File "<stdin>", line 2, in f 
NameError: global name 'x' is not defined 
Problemi correlati