Enigma Tuple Singleton dan Penukaran Stringy mereka
Apabila mencipta tupel dengan satu elemen, anda mungkin menjangkakan ia akan mengekalkan tupelnya alam semula jadi. Walau bagaimanapun, dalam Python, tingkah laku pelik berlaku.
Masalahnya:
Pertimbangkan kod berikut:
a = [('a'), ('b'), ('c', 'd')]
Anehnya, apabila anda mencetak jenis setiap elemen dalam a, anda mendapat output berikut:
['a', 'b', ('c', 'd')] <type 'str'> <type 'str'> <type 'tuple'>
Mengapa dua yang pertama elemen, walaupun disertakan dalam kurungan, berkelakuan sebagai rentetan dan bukannya tupel?
Jawapannya:
Kuncinya terletak pada memahami sintaks Python untuk tupel. Tanda kurung sahaja tidak mencipta tuple dengan satu elemen. Untuk berbuat demikian, anda mesti menambah koma selepas elemen. Perbezaan ini digambarkan di bawah:
type(('a')) # A string type(('a',)) # A tuple
Untuk membetulkan contoh kod, tambah koma selepas rentetan elemen tunggal:
a = [('a',), ('b',), ('c', 'd')]
Sebab:
Menurut dokumentasi Python, tupel kosong dan tupel dengan satu item mempunyai keperluan sintaks yang unik. Tuple kosong dibuat dengan sepasang tanda kurungan kosong, manakala tupel dengan satu item memerlukan nilai diikuti dengan koma.
Pelingkaran:
Jika anda menemui mengekori koma menjadi tidak menyenangkan dari segi estetika, anda boleh membuat tuple dengan satu elemen dengan menghantar senarai ke tuple() fungsi:
x = tuple(['a'])
Atas ialah kandungan terperinci Mengapa Python Melayan `('a')` sebagai String, Bukan Tuple?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!