Подтвердить что ты не робот

Почему добавление конечной запятой после имени переменной делает ее кортежем?

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

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

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

4b9b3361

Ответ 1

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

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

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

См. раздел Раздел Python Tutorial по кортежам и последовательностям

Ответ 2

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

Ответ 3

Обновление

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

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

В python кортеж обозначается скобкой.

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

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

Например:

abc = ('my', 'string')

Как насчет одиночных кортежей? Обозначение скобок все еще сохраняется.

abc = ('mystring',)

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

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

или

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

Итак, в действительности, что вы делали, это создать единичный кортеж в отличие от строки.

документация четко говорит:

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

Ответ 4

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

a, b = (12, 14)

print type(a)

Вывод:

Int

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

a, = (12, )

print type(a)

Вывод:

Int

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

a = (12,)

print type(a)

Вывод:

кортеж

Ответ 5

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

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

Если вы музыкант, слово tuple может ввести в заблуждение, так как слова tuple и triple используются для описания группировок заметок, которые используются в определенном типе сигнатуры времени, что они не являются строго совместимыми. Например, группировка двух восьмых нот воспроизводилась так, как если бы сигнатура времени составляла 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

Ответ 6

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

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

x,y = 20,50

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

print 'hello',
print 'world'

результат:

hello world