SORU
24 NİSAN 2014, PERŞEMBE


Neden bir sözlük bir demet olarak çözdükten olabilir?

Bugün, bir özel durum yoktu ve bir ifade gördüm. Herkes arkasındaki teori açıklayabilir mi?

>>> x, y = {'a': 2, 'b': 5}
>>> x
'a'
>>> y
'b'

CEVAP
24 NİSAN 2014, PERŞEMBE


Python iterable her paketten olabilir1:

>>> x,y,z = [1, 2, 3]  # A list
>>> x,y,z
(1, 2, 3)
>>> x,y,z = 1, 2, 3  # A tuple
>>> x,y,z
(1, 2, 3)
>>> x,y,z = {1:'a', 2:'b', 3:'c'}  # A dictionary
>>> x,y,z
(1, 2, 3)
>>> x,y,z = (a for a in (1, 2, 3))  # A generator
>>> x,y,z
(1, 2, 3)
>>>

Ayrıca, bir sözlük üzerinden yineleme çünkü sadece kendi anahtarları verir:

>>> for i in {1:'a', 2:'b', 3:'c'}:
...     print i
...
1
2
3
>>>

bir sözlük üzerinde dolaşır) ambalajın aynı şekilde sadece kendi anahtarları ayıklar.


1Aslında, her iterable çözdükten olabilir demeliyimsüreceiçine paketten adları iterable uzunluğuna eşittir:

>>> a,b,c = [1, 2, 3]  # Number of names == len(iterable)
>>>
>>> a,b = [1, 2, 3]  # Too few names
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 2)
>>>
>>> a,b,c,d = [1, 2, 3]  # Too many names
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: need more than 3 values to unpack
>>>

Ama bu Python 2 için tek durumdur.x. Python 3'te.x, sadece isimleri (sonlu) herhangi büyüklükteki bir iterable açmak için izin verir extended iterable unpacking,:

>>> # Python 3.x interpreter
...
>>> a, *b, c = [1, 2, 3, 4]
>>> a, b, c
(1, [2, 3], 4)
>>>
>>> a, *b = [1, 2, 3, 4]
>>> a, b
(1, [2, 3, 4])
>>>
>>> *a, b, c = [1, 2, 3, 4]
>>> a, b, c
([1, 2], 3, 4)
>>>

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AFISHAL

    AFISHAL

    7 Mart 2009
  • alexis gillis

    alexis gilli

    23 HAZİRAN 2011
  • BumbleDroid

    BumbleDroid

    18 EKİM 2010