v Pythonu vede k chybám (hlavně u lidí, co na tento jazyk přecházejí), jak se zapisuje n-tice s jedním prvkem. Úvahy jsou asi následující:
- n-tice se třemi prvky se zapisuje jako (1, 2, 3)
- n-tice se dvěma prvky (dvojice) se zapisuje jako (1, 2)
- a tedy n-tice s jedním prvkem se zapisuje jako (1)
jenže to není pravda, to poslední je jen výraz s konstantou v závorce, správně je (1, )
(Vlastně mi vypadl unit type, ale to je ještě zamotanější :-)
Ono to nevadí do chvíle, než se n-tice používají jako immutable seznamy
jj já vím, jen jsem psal, jak to vidí vývojáři, kteří na Python přechází. Jdou na https://www.w3schools.com/python/python_tuples.asp (například) a tam čtou "Tuples are written with round brackets". Nebo - což asi udělají dnes častěji - se zeptají LLMka (se správně nastaveným system promptem etc.):
"how to write tuple?"
"In Python, a tuple is created by placing comma-separated values inside parentheses (). Here is an example of how to write a tuple: my_tuple = (1, 2, 3, 4, 5) Tuples are immutable, which means their elements cannot be changed after creation."
provider:OpenAI
model: gpt-4
[ale to se dostáváme trošku jinam - k tomu, že každá blbost z LLM už bude nadlouho chápána jako ta jediná pravda, protože je samopotvrzující se]
10. 5. 2025, 12:02 editováno autorem komentáře
To ano, v dnešní době je velmi snadné podlehnout dezinformacím a je proto potřeba pečlivě vybírat kvalitní zdroje, proto také sleduji Vaši práci ;)
Osobně jsem se to naučil od Freda Baptiste, ale třeba tutorial na python.org to má také korektně:
```
A tuple consists of a number of values separated by commas, for instance:
t = 12345, 54321, 'hello!'
```
V "oficiálním" popisu data modelu tamtéž je zmíněn i ten "problematický" singleton.
Pro zajímavost mě gpt-4 s kustomizací https://chatgpt.com/g/g-cKXjWStaE-python odpověl vcelku korektně:
` Create a Tuple`
```
1. With parentheses:
my_tuple = (1, 2, 3)
2. Without parentheses (comma makes the tuple):
another_tuple = 1, 2, 3
3. Singleton tuple (important syntax quirk):
not_a_tuple = (1) # This is just an integer
singleton = (1,) # This is a tuple with one element
4. Using the tuple() constructor:
tuple_from_list = tuple([1, 2, 3])
```
díky kc
10. 5. 2025, 20:35 editováno autorem komentáře
Pořád to je nekonzistentní, pokud by udělali povinnou trailing comma, bylo by to konzistentní pro všechny délky tuple. Ale ne, je to pořád jenom pro jednočlennou n-tici. A trailing comma je povolená a některé formátovače (Ruff) podle ní mohou měnit formátování - prostě zmatek.
Nakonec dojdeme k tomu, že řešením jsou stejně typové anotace - stejně jako v jiných jazycích. Duck typing je přinejmenším kontroverzní věc.