2012-11-28 29 views
6

Python 2.6.6 aradığımda .get'in sonucunu aldığınızda sonuç bir tuple'dır. Bu benim için mantıklı değil. Örnek:Python'daki zincirleme bir sözlük .get() öğesi, verilen varsayılan bir tuple olmadığında bir tuple döndürüyor?

<type 'tuple'> 

üzerinden

box = {}.get('test1',{}).get('test2','hrmm'), 
print type(box) 

baskılar bunlar benim için hiçbir mantıklı. Açıkça, ikinci almanın varsayılanı basit bir dizedir. Peki ne veriyor? herhangi bir anlayış için teşekkürler.

cevap

12

bir sondaki virgül, yani tek unsur demet içinde {}.get('test1',{}).get('test2','hrmm') sonucunu alıyoruz.

>>> box = 1, 
>>> box 
(1,) 
>>> type(box) 
<type 'tuple'> 
+1

+1: Burada

bu basit edebi ile nasıl çalıştığını gösteren bir örnektir. Python'un yeni başlayanlar için pek çok tuzağı yok, ama kopyaların söz dizimindeki virgüllerin rolü bunlardan biri. Genellikle, diğer yönden ısırır - gerçi insanlar (foo) 'nun foo'yu içeren bir tuple olmasını beklerken aslında sadece foo'dur. Bu soru, tipik hatanın eğlenceli bir şekilde yıkılmasını göstermektedir. –

+0

Teşekkür ederim. Şu an çok aptalım. Ha Ha. Evet, elbette ki, buradaki virgül, bir çeşit sekans tipi nesne yaratacaktır. Birçok değişiklik ve denemeler boyunca takip eden virgül görmek için tamamen körüm. –

2

Orada Sen satırın sonunda bir eğik virgül Kutun atama