2010-02-06 12 views
7

Bu kodu atın:Adlandırılmış dosyalara _replace'a daha iyi bir alternatif nedir?

>>> import urlparse 
>>> parts = urlparse.urlparse('http://docs.python.org/library/') 
>>> parts = parts._replace(path='/3.0'+parts.path) 

parts._replace works ancak bir çizili yöntemdir olarak, iç olması gerekiyordu ve alışık değildir. Alternatif var mı? Yapmak istemiyorum:

>>> parts = parts[:2] + ('/3.0'+parts.path,) + parts[3:] 

ki bu, onun sıradan bir kayıt düzeni ve bir namedtuple ve yapıyor yapar Çünkü:

>>> parts = namedtuple(scheme=parts.scheme, netloc=parts.netloc, etc etc) 

tür aptalca. :)

Fikirler?

cevap

19

namedtuple yönteminin başlangıç ​​alt çizgi ile başlaması, yalnızca ad çakışmalarını önlemek içindir. Bunlar, alan adlarıyla çakışmaları önlemek için, yöntem ve özellik adlarının bir alt çizgi ile başlamasını sağlar. should not be considered to be for internal use only:

+0

Ahaaaa ......... –

+0

AFAIK bir PEP (à la 'class_') sadece için namedtuple', kimse bu * son eklemeli * Bir alt çizgi daha uygun olur iddia nerede' için orada asla Bu tür yanlış anlamaları önlemek. – tzot

+1

Yeniden birleştirme, rename = True seçeneği ile iyi çalışmadığı halde daha iyi bir seçim olabilir. FWIW, isim verilen kod, yayınlanmadan önce kapsamlı bir şekilde gözden geçirildi ve tartışıldı. Tarifin oluşturulması bir topluluk çabasıydı (bkz. Http://code.activestate.com/recipes/500261-named-tuples/) ve daha sonra revizyon ve python-dev üzerine inceleme yapıldı. –