2015-03-27 7 views
5

Sto guardando il codice in questo repo https://github.com/datacenter/cobra e sto vedendo le importazioni dai comandi incorporati come segue in alcuni file:Perché importare i builtin se non si ridefiniscono mai le funzioni predefinite?

cobra/internal/codec/jsoncodec.py:15:from builtins import str 
cobra/internal/codec/xmlcodec.py:15:from builtins import str 
cobra/internal/base/moimpl.py:16:from builtins import next 
cobra/internal/base/moimpl.py:17:from builtins import str 
cobra/internal/base/moimpl.py:18:from builtins import object 
cobra/internal/rest/accessimpl.py:15:from builtins import object 
cobra/internal/rest/accessimpl.py:16:from builtins import str 
cobra/mit/session.py:15:from builtins import str 
cobra/mit/session.py:16:from builtins import object 
cobra/mit/meta.py:16:from builtins import str 
cobra/mit/meta.py:17:from builtins import next 
cobra/mit/meta.py:18:from builtins import object 
cobra/mit/access.py:21:from builtins import object 
cobra/mit/naming.py:15:from builtins import next 
cobra/mit/naming.py:16:from builtins import str 
cobra/mit/naming.py:17:from builtins import object 
cobra/mit/request.py:15:from builtins import str 
cobra/mit/request.py:16:from builtins import object 

Qual è la logica/ciò che si guadagna in questo modo? Non c'è posto nel modulo in cui questi oggetti sono ridefiniti.

Su una nota a margine, questo rompe la compatibilità 2.7 che mi aspettavo da questo modulo, come specificato nei documenti.

+0

Forse una buona idea dovrebbe essere quella di chiedere agli sviluppatori del progetto perché diavolo lo fanno! –

+0

Avere quei nomi nello spazio dei nomi del modulo sarà 1. leggermente più performante che accedervi come built-in, e 2. non sarà influenzato da eventuali ridefinizioni dei moduli built-in successivi importati. Perché l'hanno fatto, non posso dire; la gente mi è piaciuta molto meglio in questo modo ... – kindall

+0

In quale caso hai bisogno di prestazioni con metodi incorporati per l'importazione? E, questo approccio non funziona su Python 2.x –

risposta

8

Non so perché è fatto in cobra in modo specifico, ma è un trucco per scrivere codice che funzioni in Python 2 e 3. Vedere compatible_idioms. Non dovrebbe rompere 2,7 ma devi scrivere il codice "3x-ish".

aggiornamento

Per 2.x, il modulo builtins deve essere installato dal pypi. Non sono le funzioni native native, ma gli aggiornamenti compatibili 3.x.

+1

Nota 'builtins' fa parte del pacchetto _future_pypi (vale a dire può essere installato tramite' pip install future') –

Problemi correlati