SORU
10 Mayıs 2015, Pazar


Neden boş bir liste için atama yapar ([] örneğin = "") hiç bir hata yükseltmek?

Python 3.4, ben yazmaya

[] = "" 

ve gayet iyi çalışıyor, özel Durum oluşturuldu. Ama tabii ki [] "" daha sonra eşit değil.

[] = ()

ayrıca gayet iyi çalışıyor.

"" = []

ama beklendiği gibi bir özel durum oluşturur

() = ""

ama beklendiği gibi bir özel durum oluşturur. Neler oluyor?

CEVAP
10 Mayıs 2015, Pazar


Eşitlik için karşılaştırma değil.atama.

Python çoklu hedefler atamak için izin verir:

foo, bar = 1, 2

iki değer foo bar, sırasıyla atar. Tüm ihtiyacınız olan birsırayaiterablesağ tarafta, ve bir liste veya soldaki isimleri demet.

Ne zaman:

[] = ""

bir atanmışboşisimleri boş bir liste sıra (boş dizeleri hala dizisi).

Aslında yapmamakla aynı şeydir:

[foo, bar, baz] = "abc"

nerede daha az karakter ile foo = "a", bar = "b" baz = "c", ama sonunda.

Yapamazsınız, ancak bir dize atamak için bir atama Sol tarafta "" hiçbir zaman çalışır ve her zaman bir sözdizimi hatası.

Assignment statements documentation:

Bir atama deyimi değerlendirir, ifade listesi (unutmayın ki bu tek bir ifade veya bir virgülle ayrılmış listesi, ikincisi verimli bir demet) ve atar tek çıkan her nesne için hedef listeleri, soldan sağa doğru.

ve

Bir hedef listesi için bir nesne atamaisteğe bağlı olarak parantez veya köşeli parantez içine alınmışözyinelemeli olarak aşağıdaki gibi tanımlanır.

Vurgu benim.

Bu Python boş liste için bir sözdizimi hatası aslında bir hata biraz atmaz! Resmi olarak belgelenmiş dilbilgisi boş hedef listesi için izin vermez, ve boş () bir hata alıyorum. bug 23275; zararsız bir hata olarak kabul edilir

Başlangıç noktası bu çok uzun zaman oldu ve zararsız olduğunu kabul ederek.

Ayrıca bakınız Why is it valid to assign to an empty list but not to an empty tuple?

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Android Authority

    Android Auth

    3 NİSAN 2011
  • GoogleTechTalks

    GoogleTechTa

    15 AĞUSTOS 2007
  • gsipek

    gsipek

    20 Temmuz 2007