Почему добавление запятой после имени переменной делает ее кортежем? - PullRequest
28 голосов
/ 20 сентября 2010

Я хочу знать, почему добавление запятой после имени переменной (в данном случае строки) делает его tuple. т.е.

>>> abc = 'mystring',
>>> print(abc)
('mystring',)

Когда я печатаю abc, возвращается tuple ('mystring',).

Ответы [ 6 ]

35 голосов
/ 20 сентября 2010

Значительными являются запятые, а не круглые скобки. В руководстве по Python написано:

Кортеж состоит из нескольких значений, разделенных запятыми

Круглые скобки используются для устранения неоднозначности в других местах, где используются запятые, например, позволяя вам вложить или ввести кортеж как часть списка аргументов.

См. Раздел Учебное пособие по Python, посвященный кортежам и последовательностям

7 голосов
/ 20 сентября 2010

Потому что это единственный способ написать кортежный литерал с одним элементом. Для литералов списка необходимые квадратные скобки делают синтаксис уникальным, но поскольку парафиты также могут обозначать группировку, заключение выражения в скобки не превращает его в кортеж: вам нужен другой синтаксический элемент, в данном случае запятая.

5 голосов
/ 20 сентября 2010

Обновление

См. Выше для гораздо лучшего ответа .

Оригинальный ответ

В питоне кортеж обозначается круглыми скобками .

Кортежи не указаны в скобках.Любое выражение может быть заключено в круглые скобки, это не является чем-то особенным для кортежей.Просто бывает так, что почти всегда необходимо использовать круглые скобки, потому что в противном случае они будут неоднозначными, поэтому методы __str__ и __repr__ в кортеже будут их показывать.

Я исправлен (все, что я делал сегодня. Вздох).

Например:

abc = ('my', 'string')

А как насчет одноэлементных кортежей?Обозначение в скобках остается в силе.

abc = ('mystring',)

Для всех кортежей скобка может быть пропущена, но запятая должна быть оставлена.

abc = 'mystring', # ('mystring',)

Или

abc = 'my', 'string', # ('my', 'string',)

По сути, то, что вы делали, - это создание кортежа из одного элемента , а не строки.

Документация четко гласит:

Список выражений, содержащий хотя бы одну запятую, дает кортеж.Длина кортежа - это количество выражений в списке.Выражения оцениваются слева направо.

1 голос
/ 30 января 2017

Когда вы видите запятую после одного значения, это значение интерпретируется как тип данных «кортеж».

Вот кое-что, что я узнал из опыта, которое может относиться к некоторым из вас:

Если вы музыкант, слово кортеж может сбивать с толку, так как слова кортеж иТройка используется для описания групп заметок, которые используются в определенном типе временной подписи, с которой они не являются строго совместимыми.Например, группа из двух восьмых нот воспроизводится так, как если бы подпись времени была 4/4 (прямое ощущение), когда подпись времени 6/8 (ощущение триплета).Или наоборот триплет, сыгранный в 4/4 времени.Это заставляет начинающего программиста интерпретировать кортеж как пару значений.

Это не тот тип кортежа, который вы видите в программировании.Эти кортежи представляют собой неизменяемый (неизменяемый один раз) тип данных последовательности, который может содержать любое количество значений, но может рассматриваться как передаваемый вместе, как если бы они были заключены в круглые скобки или, другими словами, в кортеж круглых скобок.

Вы не можете добавлять или удалять материал из кортежа, как только он назначен, поэтому он обычно используется для упаковки и распаковки переменных.Я часто использую его для возврата нескольких значений из функции:

def somefunction_foo(some_data_file):
    map1 = dict()
    map2 = dict()
    map3 = dict()

    with open(datafile, 'r') as file: # auto-close the file after this block
        for row in file:
            pass
            # don't actually pass, but 
            # fill each map with specific data from the same file

    return map1, map2, map3  # I'm returning a tuple, but without parenthesis
1 голос
/ 27 сентября 2014

Распаковка многоэлементного кортежа:

a, b = (12, 14)

print type(a)

Выход:

INT

Распаковка одноэлементного кортежа:

a, = (12, )

print type(a)

Выход:

INT

В противном случае:

a = (12,)

print type(a)

Выход:

кортеж

0 голосов
/ 02 августа 2014

В примере вопроса вы присвоили переменную 'abc' кортежу длиной 1.

Вы можете выполнить несколько назначений с помощью аналогичного синтаксиса:

x,y = 20,50

Такжеобратите внимание, что оператор print имеет особое понимание для завершения оператора print запятой;Это заставляет print опускать завершающий символ новой строки.

print 'hello',
print 'world'

result:

hello world
...