17 ms·
Why even use a list here? Tuples are for immutable/constant data. a_tuple_of_words = ("my", "tuple", "of", "words") or a_tuple_of_words = "my", "tuple", "of"
by bkeroack 12y ago
Why even use a list here? Tuples are for immutable/constant data.
a_tuple_of_words = ("my", "tuple", "of", "words")
or
a_tuple_of_words = "my", "tuple", "of", "words"
- dozzie 12y ago...because it's a list? Tuples were supposed to have a structure (at least that's what all the rest of the world thinks of them), so iterating through combination of apples, cars and languages makes no sense whatsoever. But yes, Python misses entirely the point of tuples, treating them as read-only lists. http://dozzie.jogger.pl/2014/04/11/python-tuples-the-useless-thing-in-language/ http://dozzie.jogger.pl/2014/04/11/python-tuples-the-useless...
- bkeroack 12y agoI'm not sure what you're getting at here, or what you are expecting tuples to be like. They can have as much "structure" as you need--they're just a collection. Lighter-weight, immutable collections have a use case. The code in OP appears to be one where it makes sense. I follow the rule where variables are mutable IFF they need to be mutable.
- dozzie 12y agoTuples by pythonists are used as they were mere lists, just immutable. This is clearly displayed by Python's own interface. For the rest of the world, tuples are not immutable lists. They are tuples, i.e. collections of "objects" that could share nothing about their type. Tuples often are not even iterable! (Erlang, Haskell) The fact that tuples in Python can have as much structure as one wants is derived from dynamic typing, not from the tuples' nature. The same you could say about Python's lists. This is a really subtle issue. It takes to know more languages to see it clearly.
- bkeroack 12y agoIf it's so subtle, does it matter? This sounds like you just have a problem with the word "tuple" applied to an object that behaves differently from tuples in a statically-typed language. Would you feel better if they named it "ImmutableList" instead?
- jholman 12y agoCan't speak for GP, but I would [feel better with that name]. (Although I agree with you that statically-typed-language-tuples don't seem to make sense in Python.) But hey... Python's weird choice of how to name the ImmutableList could be worse, right? For example, someone could be malicious enough to call their general-purpose associative array a "hash", just because a hashmap (note: not a hash) is a good implementation for large associative arrays. Wow, that'd be hilariously misleading, wouldn't it? Good times! Or imagine someone was silly enough to name their auto-resizing arrays "vectors", even though in all previously existing contexts a "vector" is a sort of thing which absolutely cannot be meaningfully resized/extended. Ha. Think of the tiny cognitive burden placed on generations of future programmers-who-study-math, trying to juggle these two very-similar-but-distinct concepts, multiplied by the number of such future programmers. Amazing practical joke, right? /rant
- wtetzner 12y agoNot really that important, but I think map is a better name than associative array.
- dozzie 12y agoNo, it's not a problem with word "tuple" behaving differently from statically-typed language. It's a problem with word "tuple" behaving differently from all the rest of the world. Yes, I would feel better if it was named "ImmutableList" or any other way that is not misleading about the purpose.
- jl6 12y agoI'm sorry, I don't see clearly what a tuple should be. What would be different about Python tuples if they were true tuples?
- Peaker 12y agoPython tuples are used in both ways. Even in Haskell, though, people often write all kinds of type-class magic to allow "iterating" over a tuple. For example, a Binary instance over a tuple wants to call "put" on each element. Haskell's (Oleg's) HList is basically a tuple with iteration/list-like operations.
- dragonwriter 12y agoThe distinction between "tuple" and "immutable list" doesn't make any sense outside of a staticly-typed language, since the only difference is what other values a particular value is type-compatible with.
- dozzie 12y agoYes, of course it doesn't. You have just vanished whole Erlang. Or is it statically typed?...
- pdonis 12y ago> Tuples were supposed to have a structure (at least that's what all the rest of the world thinks of them) No, a structure is, you know, a structure -- what C calls a struct. Python calls it a namedtuple. If some people call it just a tuple, well, that's a difference in terminology, but it doesn't mean Python is confused about the concepts, it's just using terminology you're not used to. Also, if we're going to be pedantic about the meaning of data types, your blog post is wrong about lists. You say "position in the list doesn't matter", but that means ordering doesn't matter, and an unordered collection of similar objects is a set, not a list. Python makes this distinction clear: a list is ordered, a set is not.
- dozzie 12y ago> [...] that's a difference in terminology, but it doesn't mean Python is confused about the concepts No, it menas exactly this. The term "tuple" and its use predates Python. Sorry, no banana. > [...] your blog post is wrong about lists. You say "position in the list doesn't matter", but that means ordering doesn't matter Oh, so what's the difference in meaning of element True on position 1 and element True on position 20? Position in list doesn't matter if we're talking about meaning of the elements.
- pdonis 12y ago> The term "tuple" and its use predates Python. References, please? And not mathematical references; programming references. C was using the keyword "struct" long before Python to refer to what you are calling a tuple. > what's the difference in meaning of element True on position 1 and element True on position 20? The fact that the index is 1 instead of 20. Both elements have the same type, and might well refer to the same property of some sequence of things; but the index being 1 instead of 20 means the element True is describing that property relative to the first item in some sequence, instead of the 20th item. That's why position in the list makes a difference: the ordering of the items, as well as the type of the items, carries information. (Of course, in Python the list items don't even have to be of the same type; but most uses of Python lists in practice that I've seen do assume that all the elements are "the same kind of thing".)
- blossoms 12y agoNB a tuple of one item only requires a trailing comma, and a tuple of zero items is represented as ()