Saya ingin tahu mengapa di Python koma tertinggal dalam daftar adalah sintaks yang valid, dan tampaknya Python mengabaikannya:
>>> ['a','b',]
['a', 'b']
Masuk akal ketika tuple sejak ('a')
dan ('a',)
dua hal yang berbeda, tetapi dalam daftar?
Saya ingin tahu mengapa di Python koma tertinggal dalam daftar adalah sintaks yang valid, dan tampaknya Python mengabaikannya:
>>> ['a','b',]
['a', 'b']
Masuk akal ketika tuple sejak ('a')
dan ('a',)
dua hal yang berbeda, tetapi dalam daftar?
Jawaban:
Keuntungan utama adalah membuat daftar multi-baris lebih mudah untuk diedit dan mengurangi kekacauan dalam diff.
Mengubah:
s = ['manny',
'mo',
'jack',
]
untuk:
s = ['manny',
'mo',
'jack',
'roger',
]
hanya melibatkan perubahan satu baris dalam diff:
s = ['manny',
'mo',
'jack',
+ 'roger',
]
Ini mengalahkan perbedaan multi-garis yang lebih membingungkan ketika koma trailing dihilangkan:
s = ['manny',
'mo',
- 'jack'
+ 'jack',
+ 'roger'
]
Perbedaan terakhir membuat lebih sulit untuk melihat bahwa hanya satu baris yang ditambahkan dan baris lainnya tidak mengubah konten.
Ini juga mengurangi risiko melakukan hal ini:
s = ['manny',
'mo',
'jack'
'roger' # Added this line, but forgot to add a comma on the previous line
]
dan memicu rangkaian string literal implisit , menghasilkan s = ['manny', 'mo', 'jackroger']
bukannya hasil yang diinginkan.
List = "[" {Item ","} "]".
vsList = "[" ({Item","}Item|)"]".
"\"item\","
untuk setiap item daripada mencetak "\"item\""
untuk setiap item diikuti oleh ","
untuk semua kecuali item terakhir.
Ini adalah konvensi sintaksis umum untuk membolehkan koma tertinggal dalam array, bahasa seperti C dan Java mengizinkannya, dan Python tampaknya telah mengadopsi konvensi ini untuk daftar struktur datanya. Ini sangat berguna saat membuat kode untuk mengisi daftar: cukup buat urutan elemen dan koma, tidak perlu menganggap yang terakhir sebagai kasus khusus yang seharusnya tidak memiliki koma di bagian akhir.
Ini membantu untuk menghilangkan jenis bug tertentu. Terkadang lebih jelas untuk menulis daftar pada banyak baris. Tetapi dalam, nanti pemeliharaan Anda mungkin ingin mengatur ulang item.
l1 = [
1,
2,
3,
4,
5
]
# Now you want to rearrange
l1 = [
1,
2,
3,
5
4,
]
# Now you have an error
Tetapi jika Anda membolehkan tanda koma, dan menggunakannya, Anda dapat dengan mudah mengatur ulang garis tanpa menimbulkan kesalahan.
Sebuah tuple berbeda karena ('a')
diperluas menggunakan kelanjutan implisit dan ()
s sebagai operator prioritas, sedangkan ('a',)
mengacu pada tuple 1 panjang.
Contoh asli Anda seharusnya tuple('a')
('a'),
adalah string; tetapi poin saya adalah bahwa trailing koma di tuple adalah penting, tetapi dalam daftar mereka tampaknya belum Python menerimanya.
tuple('a')
mungkin contoh yang buruk, karena secara umum tuple(x)
dan (x,)
bukan hal yang sama. tuple('ab') != ('ab',)
. tuple('a') == ('a',)
hanya karena 'a'
ada untaian panjang 1.
>>> ("a",) == ("a")
False >>> ("ab",) == ("ab")
False >>> ("ab", "bc",) == ("ab", "bc")
True
Alasan utamanya adalah untuk membuat diff tidak terlalu rumit. Misalnya Anda memiliki daftar:
list = [
'a',
'b',
'c'
]
dan Anda ingin menambahkan elemen lain ke dalamnya. Maka Anda akan akhirnya melakukan ini:
list = [
'a',
'b',
'c',
'd'
]
dengan demikian, diff akan menunjukkan bahwa dua baris telah diubah, pertama menambahkan ',' sejalan dengan 'c' dan menambahkan 'd' di baris terakhir.
Jadi, python memungkinkan mengekor ',' dalam elemen terakhir dari daftar, untuk mencegah perbedaan ekstra yang dapat menyebabkan kebingungan.