2013-05-20 19 views
8

Bu, Python'da, liste kavramasındaki nesnelerin listesini güncellemek veya benzer şekilde mümkün mü? Örneğin , ben listedeki tüm nesnelerin özelliğini ayarlamak istiyorum: Liste özelliklerini anlamada nesne özelliklerini güncelleme

result = [ object.name = "blah" for object in objects] 

veya fonksiyon map ile

result = map(object.name = "blah", objects) 

onun için-döngü özellik ayarıyla olmadan sağlanabilir miydi ?

(Not: her şeyden örnekler kasıtlı yanlış ve fikri ifade etmek sadece sağlanan)

+0

: Bir bağlam anahtarının biraz yani 'const sonuç = objects.map (object => object.name = 'selam')' python'a geri dönüyorum. – cosmosa

cevap

20

Nihayetinde atama bir "Beyan" değil, bir "İfade", bu yüzden bir lambda kullanılamaz İfade veya liste anlama. Denediğin şeyi başarmak için normal bir işleve ihtiyacın var.

[setattr(obj,'name','blah') for obj in objects] 

Ama kullanmak etmeyiniz:

(None listesini dönen) yapacak bir yerleşik bulunmaktadır. Sadece bir döngü kullanın. Verimlilikte herhangi bir fark olduğunu fark edeceğinizden ve bir döngü çok daha net olduğundan şüpheliyim.

for obj in objects: obj.name = "blah" 

Birinin onlara çünkü çoğu insan olduklarını liste comprehensions kullanmak istediğinizi bulmak: (neden görmüyorum rağmen) gerçekten bir 1-astar gerekiyorsa

"hızlı". Bu doğru, ama sadece yeni bir liste oluşturmak için. Yan etkiler için liste kavramasının kullanılması, herhangi bir performans avantajına yol açması muhtemel değildir ve kodunuz okunabilirlik açısından acı çekecektir. Gerçekten, .append ile eşdeğer döngü yerine liste kavramasının kullanılmasının en önemli sebebi, okunması daha kolay olmasıdır.

böyle bir şey mümkün nerede olacağını Geçenlerde javascript bir sürü kodlama oldum
+0

Gerçekten bunu yapmamanız gerektiğine% 100 katılıyorum, ancak bunu yapmanız gerekiyorsa, en azından dönüştürmeyi Falsey değeri döndüren bir işlevle kaplayın ve uygulamak için anlamada bir “if” koşulu kullanın. Sadece dönüştürmek istediğinizde yeni bir liste oluşturmazsınız. –

+1

@ sr2222 - Sanırım siz şunu * yapabilirsin: [Nesnelerdeki objeler için hiçbiri setattr (obj, 'name', 'blah')] 'dır, fakat bu benim versiyonumdan bile daha net değildir. Daha sonra, “Hiçbiri” listesinin, bu yaklaşımın artan karmaşasından daha az kötülük olduğunu söylerdim. Ama her durumda - Ne kullanılmalı. Bir döngü kullanın :) – mgilson

+0

Eh, liste kavramak yan etkileri için kullanılmamalıdır, çünkü sadece kodu okumak zor hale getirir. Fakat bir yan etki için liste kavramasını kullanacaksanız, en azından işe yaramaz bir eser üretmeyecek şekilde yapmaya çalışmanız gerektiği gibi görünüyor. Okunabilirlik kadarıyla, ya gerçekten açık olanı sanmıyorum. :) –

İlgili konular