2015-03-27 15 views
5

Bu Repo https://github.com/datacenter/cobra kod bakıyorum ve birkaç dosyalarında aşağıdaki gibi ben yerleşikleri ithalatı görüyorum:/bu yapıldığında nelerin mantık neYerleşik işlevleri hiçbir zaman yeniden tanımlamazsanız neden içe aktarılır?

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 

kazanılır mı? Bu nesnelerin yeniden tanımlandığı modülde yer yoktur.

Bir yan notta, bu, bu modülden belgelerinde belirtildiği gibi beklediğim 2.7 uyumluluğunu bozuyor.

+0

Belki de daha iyi bir fikir, projenin geliştiricilerine neden böyle bir şey yaptıklarını sormak olmalıdır! –

+0

Modül ad alanındaki bu adlara sahip olmak, 1. yerleşik olarak erişmekten çok daha fazla performans gösterecektir ve 2. daha sonra içe aktarılan modüllerin yerleşiklerin yeniden tanımlanmasından etkilenmeyecektir. Neden yaptılar, söyleyemem; insanlar sadece bu şekilde daha iyi sevdi ... – kindall

+0

Hangi durumda performans içe gömme yöntemleri ihtiyacınız var? Ve, bu yaklaşım Python 2.x üzerinde çalışmıyor. –

cevap

8

Neden özel olarak kobrada bittiğini bilmiyorum, ancak python 2 ve 3'te çalışan kod yazmanın bir hilesidir. Bkz. compatible_idioms. 2.7 kırmamalı, ama "3x-ish" kodunu yazmalısın.

2.x için

güncelleme builtins modül pypi dan yüklenmesi gerekiyor. Yerel yerleşik işlevler değil, 3.x uyumlu güncellemeler.

+1

Not 'builtins'ün _future_ pypi paketinin bir parçası olduğunu belirttiğiniz için teşekkür ederiz (yani 'pip install future' aracılığıyla yüklenebilir) –

İlgili konular