Gönderen docs :
ters ( sıra )
Tersini döndür iterator
. seq, bir __reversed__()
yöntemi olan veya dizi protokolünü destekleyen bir yöntem olmalıdır ( __len__()
yöntem ve __getitem__()
0'dan başlayan tamsayı bağımsız değişkenleri olan yöntem).
Bir dict
nesne uygulamaz __reversed__
. Her iki yöntemi de uygular. Ancak, __getitem__
anahtarları tamsayı yerine argüman olarak alır (0'dan başlayarak).
Neden olarak, bu zaten burada önerilmiş ve tartışılmıştır .
DÜZENLE:
Bu alıntılar Python-Dev posta listesindendir (25.'de başlayan "dict için __reversed__ yöntemleri ekle" dizisi, "kavramsal" argümanlarla başlayacağım, ilki Antoine Pitrou'dan:
OrderedDict'in reversed () işlevini zaten desteklediği hiçbir şeye değmez. Argüman her iki yönde de olabilir:
dict bugünlerde OrderedDict ile benzer, bu yüzden de ters ();
sipariş vermeyi önemsediğinizi açıkça belirtmek için OrderedDict kullanabilirsiniz; dikte etmek için bir şey eklemeye gerek yok.
Benim düşüncem, düzenli zorlamalar için garantili yerleştirme düzeninin yepyeni olması, bu nedenle kavramın yerleşmesi ve zorluklar hakkında günlük düşüncenin bir parçası olması biraz zaman alacak. Bu gerçekleştiğinde, kullanım örneklerinin ortaya çıkması ve __reversed__'nin bir noktada eklenmesi muhtemelen kaçınılmazdır. Uygulama basit görünüyor ve sınırlı bir koleksiyonun tersine çevrilebilir olmasını beklemek pek kavramsal bir sıçrama değil.
Ardından Raymond Hettinger'ın cevabı:
Diktelerin artık ekleme sırasını izlediği göz önüne alındığında, en son eklemeleri bilmek (yani bir görev diktesindeki en son eklenen görevler arasında geçiş yapmak) makul görünmektedir. Diğer olası kullanım örnekleri büyük olasılıkla Unix kuyruk komutunu nasıl kullandığımıza karşılık gelecektir.
Bu kullanım durumları ortaya çıkarsa, __reversed__'nin zaten desteklenmesi iyi olur, böylece insanlar popitem () çağrılarını ve ardından yeniden yerleştirmeleri kullanarak çirkin bir geçici çözüm uygulamak için cazip olmaz.
Posta listesine ifade asıl sorun oldu bu çok fazla kabartmak eklemek veya en azından bazı uygulamalarda (çift bağlı listeler yerine tek başına bağlantılı olanlar zorunda) bellek verimliliğini azaltacağını, burada Python hata izleyiciden inada Naoki en tırnak (var konu 33462 ):
"Sipariş vermek", "geri alınabilir" anlamına gelmez. Örneğin, tek bağlantılı liste sipariş edilir, ancak geri döndürülemez.
CPython uygulaması verimli sağlayabilirken __reverse__
, tüm Python uygulamasının bunu sağlaması beklendiği __reverse__
anlamına gelir . Örneğin, bazı Python uygulamaları hashmap + tek bağlantılı listeyle dikte uygulayabilir. Eklenirse , artık mümkün değil.__reverse__
Posta listesine geri dönelim, son iki mesaj (her ikisi de 08.06.2018 tarihinde yayınlanmıştır). Birincisi Michael Selik'ten:
Oybirliğinin v3.8'e dahil edilmek için +1 olduğunu söylerken doğru muyum?
Konudaki son nokta, çeşitli uygulamaları araştıran ve bu özelliği 3.8'e dahil etmenin uygun olduğuna karar veren INADA Naoki idi. Anladığım kadarıyla Guido, INADA'nın MicroPython'un v3.7 uygulamasını beklemesine ilişkin tavsiyesine katılıyordu. INADA fikrini değiştirdiğinden, her şeyin lehte olduğunu tahmin ediyorum.
Guido van Rossum'un mesajıyla sonuçlanıyor:
Bana doğru geliyor. Daha sonra durumun böyle olduğu iki sürümümüz olacak:
Diğer cevap ve yorumlarda belirtildiği gibi, reversed()
3.8 (14.10.2018) sürümünden bu yana hem dikte hem de dikte için desteklenmektedir.
dict
reversed