Мені цікаво, чому в 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 дозволяє відслідковувати "," в останньому елементі списку, щоб уникнути зайвих розбіжностей, що може спричинити плутанину.