2015-10-26 16 views
5

Not: Bu performans ilişkin sorunlar ele ki değil linked answer kopyası olduğunu ve ne dict() işlev çağrısı yapıldığında perde arkasında olur. Benim sorum, her zaman anahtar kelime argümanlarıyla ilgili, her zaman string türünde anahtarlarla sonuçlanıyor. Kesinlikle bir kopya değil.Will dict (** kwargs) her zaman Keys'in tip dizgisi olduğu bir sözlük verir mi?


Yöntem-1:

suit_values = {'spades':3, 'hearts':2, 'diamonds':1, 'clubs':0} 

Yöntem-2:

suit_values = dict(spades=3, hearts=2, diamonds=1, clubs=0) 

Yöntem-1 bana mantıklı. Python'a anahtarlarının dizeleri ve değerlerinin sayısal olduğu bir sözlük vermesini söylemek gibi. Ama Yöntem-2'de python, anahtarların dizgiler olduğunu ve başka bir şeyin olmadığını bilir?

Bu bir eğilim mi? öyleyse, bu tür davranışlar gösteren başka örnekler (sözlüklerin dışında)?

DÜZENLEME-1: yanıtlarından

Benim anlayış:

  1. Yöntem-2 bir sözlük oluşturma dict(**kwargs) yoludur.
  2. spades=3 yılında spades geçerli bir Python tanımlayıcı, bu nedenle tip string bir anahtar olarak alınır. Yani

, tuşlar tip string vardır bir sözlükte olacak dict(**kwargs)hep sonuç?

EDIT-2: ^^ YES.

cevap

4

İkinci durumda, dict işlevi, anahtar kelime bağımsız değişkenlerini kabul eder. Ve anahtar kelime argümanları sadece dize parametreleri olarak geçirilebilir.

documentation,

ilk örnekte olduğu gibi anahtar kelime argümanları sağlanması aktaran tek geçerli Python tanıtıcılardır tuşlar için çalışır. Aksi takdirde, geçerli tüm anahtarlar kullanılabilir.

Dize geçerli bir python tanımlayıcısı olduğu sürece, bunu ikinci formda bir anahtar olarak kullanabilirsiniz.Örneğin, aşağıdaki ikinci bir biçimine çalışmaz

>>> dict(1=2) 
    File "<input>", line 1 
SyntaxError: keyword can't be an expression 

Ancak aynı Yöntem 1, değişmez bir sözlük ifadesi, şifreler herhangi hashable değeri olarak kullanabilir

>>> {1:2} 
{1: 2} 
+0

Gerçekten "Ve anahtar kelime bağımsız değişkenleri yalnızca dizelerle parametre olarak iletilebilir" bölümünü almadım. – Somjit

+0

@Somjit Hmmm, biraz düzenledim. Umarım şimdi açıktır. – thefourtheye

+0

Tamam. Bu mantıklı. Dolayısıyla, anahtar kelime bağımsız değişkenleri yalnızca dizeler olarak iletilebilir. Fakat thay geçtikten sonra, dizge olarak 'emilirler', yani dize tipi nesneler olarak depolanırlar? Düzenlemem bu soruyu sorar. – Somjit

2

ilk form ile çalışacak dizeler, tamsayılar veya tuple s gibi.

Yöntem 2 - dict() yerleşik işlevi - anahtarların dizeleri olduğunu "bilmez". Bu yöntemle kullandığınız anahtarlar, dizelere dönüştürülecek geleneksel değişken adlandırma kurallarına uymak zorundadır. Bu, her anahtarın bir harf veya altçizgi ile başlaması, yalnızca harfleri, alt çizgi veya sayıları içermesi gerektiği anlamına gelir. 2a veya (1,2) gibi farklı bir anahtar kullanmayı denemek başarısız olur.

+0

yayını yeniden açabilir misiniz? Yinelenen olarak işaretlediğiniz soruyla aynı değildir. – Somjit