Выражение Python с конечной запятой: синтаксическая ошибка или кортеж? [Дубликат]

24
задан thefourtheye 10 March 2015 в 12:44
поделиться

6 ответов

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

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

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

См. раздел Python Tutorial раздел «Кортежи и последовательности»

33
ответ дан Ben James 26 August 2018 в 11:36
поделиться

Обновить

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

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

В питоне кортеж обозначается скобкой ,

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

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

Например:

abc = ('my', 'string')

А как насчет одиночных кортежей?

abc = ('mystring',)

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

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

Или

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

Таким образом, вы фактически создали один элемент tuple в отличие от строки.

В документации четко сказано:

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

4
ответ дан Community 26 August 2018 в 11:36
поделиться

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

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

Если вы музыкант, слово кортеж может быть запутанным, поскольку слова кортеж и тройка используются для описания группировок заметок, которые используются в определенном типе сигнатуры времени, что они не являются строго совместимыми. Например, группировка двух восьмых нот воспроизводилась так, как если бы сигнатура времени составляла 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
ответ дан PaulG 26 August 2018 в 11:36
поделиться

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

7
ответ дан Philipp 26 August 2018 в 11:36
поделиться

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

a, b = (12, 14)

print type(a)

Выход:

int

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

a, = (12, )

print type(a)

Выход:

int

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

a = (12,)

print type(a)

Выход:

tuple

1
ответ дан skrrgwasme 26 August 2018 в 11:36
поделиться

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

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

x,y = 20,50

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

print 'hello',
print 'world'

результат:

hello world
0
ответ дан Zv_oDD 26 August 2018 в 11:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: