Jak różnią się następujące dwa:

>>> s = 'string'
>>> tuple(s)
('s', 't', 'r', 'i', 'n', 'g')
>>> tuple([s])
('string',)
>>> tuple((s))
('s', 't', 'r', 'i', 'n', 'g')
>>> tuple((s,))
('string',)
>>>    

Ciąg jest iterable obiekt, który jest dlaczego podzielony na wielu elementów wewnątrz krotki?

4
James Sapam 8 grudzień 2013, 09:55

3 odpowiedzi

Najlepsza odpowiedź

Ktoczki nie są określane przez nawias, są one określone przez przecinek:

>>> (1)
1
>>> (1,)
(1,)
>>> (1),
(1,)
>>> 1
1
>>> 1,
(1,)

Nawity pośrednie są usuwane do ustalenia wyrażenia:

>>> tuple((((('string')))))
('s', 't', 'r', 'i', 'n', 'g')
>>> tuple((((('string'))),))
('string',)
>>> tuple((((('string'),)),))
(('string',),)

Widzisz, jak Python analizuje te wyrażenia, używając AST

>>> import ast
>>> ast.literal_eval("((((('string')))))")
'string'
>>> ast.literal_eval("((((('string')))),)")
('string',)

I pokazuje, dlaczego tuple(('string')) jest taki sam jak tuple('string'). Dodatkowe nawiasy nie tworzą krotki i są po prostu odrzucane przez parser.

5
dawg 8 grudzień 2013, 16:45

Jeśli zadzwonisz tuple na łańcuchu, czyli iterable zrobi to samo, co wywołanie list na łańcuchu zrobiłoby: pętla przez "najmniej głębokość" (pierwszego wymiaru) części iterable. Weźmy te przykłady:

>>> s = 'string'
>>> tuple(s)
('s', 't', 'r', 'i', 'n', 'g')
>>> tuple([s])
('string',)
>>>
>>> tuple((x for x in [s]))
('string',)

W pierwszym przykładzie, pierwszy wymiar w s jest ciąg "ciąg", więc krotka przyjmuje każdą wartość z s. W drugim przykładzie, pierwszy wymiar jest listą S, która zawiera zmienną s. W tym przypadku sama zmienna jest wymiarem, więc cały ciąg jest zapiekany. Udowodniono, że również w końcowym przypadku generatora.

3
samrap 8 grudzień 2013, 06:01

Tak. list Spodziewa się parametr do

Może być kolejną sekwencją, pojemnikiem, który obsługuje iterator lub obiekt iterator.

Stworza więc indywidualne ciągi dla każdego znaku w ciągu i zwraca listę. Po zamknięciu go za pomocą [] lub (,), tworzysz listę łańcuchów lub krotki ciągów. Tak więc każdy element tego jest przyjmowany i przygotowywany jest nowa lista.

1
thefourtheye 8 grudzień 2013, 05:59