Мені цікаво, чому в Python кінцевою комою у списку є синтаксис, і здається, що Python просто ігнорує його:
>>> ['a','b',]
['a', 'b']
Є сенс, коли його кортеж з тих пір є ('a')
і ('a',)
дві різні речі, але в списках?
Мені цікаво, чому в Python кінцевою комою у списку є синтаксис, і здається, що Python просто ігнорує його:
>>> ['a','b',]
['a', 'b']
Є сенс, коли його кортеж з тих пір є ('a')
і ('a',)
дві різні речі, але в списках?
Відповіді:
Основні переваги полягають у тому, що це полегшує редагування багаторядкових списків та зменшує безлад у розрізках.
Зміна:
s = ['manny',
'mo',
'jack',
]
до:
s = ['manny',
'mo',
'jack',
'roger',
]
передбачає лише зміну одноліній у диференціалі:
s = ['manny',
'mo',
'jack',
+ 'roger',
]
Це перемагає більш заплутану багаторядкову різницю, коли пропускна кома була опущена:
s = ['manny',
'mo',
- 'jack'
+ 'jack',
+ 'roger'
]
Останнє розходження ускладнює бачення того, що додано лише один рядок, а інший рядок не змінює зміст.
Це також зменшує ризик зробити це:
s = ['manny',
'mo',
'jack'
'roger' # Added this line, but forgot to add a comma on the previous line
]
і запускає неявну рядкову буквальну конкатенацію , створюючи s = ['manny', 'mo', 'jackroger']
замість запланованого результату.
List = "[" {Item ","} "]".
протиList = "[" ({Item","}Item|)"]".
"\"item\","
для кожного елемента, ніж друкувати "\"item\""
для кожного елемента, а за ним, ","
крім останнього.
Це загальна синтаксична умова, яка дозволяє тримати коси в масиві, такі мови, як C і Java, дозволяють, і Python, схоже, прийняв цю конвенцію для своєї структури даних списку. Це особливо корисно при створенні коду для заповнення списку: просто генеруйте послідовність елементів і коми, не потрібно розглядати останній як особливий випадок, який не повинен мати кінець у кінці.
Це допомагає усунути певний вид помилок. Іноді зрозуміліше писати списки в декількох рядках. Але в подальшому технічному обслуговуванні ви, можливо, захочете переставити елементи.
l1 = [
1,
2,
3,
4,
5
]
# Now you want to rearrange
l1 = [
1,
2,
3,
5
4,
]
# Now you have an error
Але якщо ви дозволите коріння комами та використовуєте їх, ви можете легко переставити рядки, не вводячи помилок.
Кортеж відрізняється тим ('a')
, що розширюється за допомогою неявного продовження і ()
s як оператора преференції, тоді як ('a',)
відноситься до кортежу довжиною 1.
Ваш оригінальний приклад був би tuple('a')
('a'),
- рядок; але моя думка полягала в тому, що проміжки коми в кортежах є значущими, але в списках вони, схоже, ще не вважають, що Python їх приймає.
tuple('a')
це, мабуть, поганий приклад, адже загалом tuple(x)
і (x,)
це не одне і те ж. tuple('ab') != ('ab',)
. tuple('a') == ('a',)
тільки тому 'a'
, що це струна завдовжки 1.
>>> ("a",) == ("a")
False >>> ("ab",) == ("ab")
False >>> ("ab", "bc",) == ("ab", "bc")
True
Основна причина - зробити різницю менш складною. Наприклад, у вас є список:
list = [
'a',
'b',
'c'
]
і ви хочете додати до нього ще один елемент. Тоді ви будете робити це:
list = [
'a',
'b',
'c',
'd'
]
таким чином, diff покаже, що два рядки були змінені, спочатку додавши ',' відповідно до 'c' та додаючи 'd' в останньому рядку.
Таким чином, python дозволяє відслідковувати "," в останньому елементі списку, щоб уникнути зайвих розбіжностей, що може спричинити плутанину.