4 ms·
No, actually, that's not correct. Why should I have to write a function to traverse a list, square each element, and recombine them into a list, when Python alr
by inklesspen 19y ago
No, actually, that's not correct. Why should I have to write a function to traverse a list, square each element, and recombine them into a list, when Python already takes care of the first and third parts for me? Code smart, man.
- mynameishere 19y agoWhy should I have to write a function A function hides the implementation. to traverse a list Because there are different ways to traverse a list. An arraylist is easier to traverse with respect to CPU cycles and memory usage (typically) than a linked list. What does python use internally? I don't know, and I'd just as soon decide that myself... square each element While there are only so many ways to square numbers, for more complicated things, you are doing to want to change implementations while keeping it all hidden. In java, you are occasionally going to want to splice in native code. recombine them into a list I may not want to recombine them in a list, but square them in place. A function makes that trivial, and further makes it trivial to decide when and how to do that. --> The real reason is one of readability. More english, less brackets and commas please.
- euccastro 19y agoI don't see the advantage of hiding the implementation in this case. The new name doesn't give any new insight, nor provides any useful abstraction over the list comprehension syntax. It only raises question marks in the reader's head: where is this defined? Does it have side effects? Am I OK to mutate the returned list? The passed list? Am I OK to assume the passed list unchanged? etc. Re: different ways to traverse a list and square elements, whenever the idiomatic implementations in your language are good enough for you, you just want to go with them. Hiding those details behind names is premature abstraction IMO. If you know you'll need your own list and square implementation, you can abstract that from the start. If you find needs for change that you didn't anticipate, the overhead of refactoring (or overloading operators, if it suits the problem) there and then is probably less than having abstracted everything that you might possibly want to change. Deciding to square the list in place is not trivial at all. If you do that, you'd better change the signature of the function so that it doesn't return anything [Edit: or using whatever convention you have to highlight mutators, like bang! names in Scheme]. Otherwise, it's too easy to use the old list assuming it has the original values, or to mutate either the old or new references assuming they belong to independent lists. Re: readability, you have to balance the familiarity of the syntax for a newcomer, and more importantly, the ease with which you can get acquainted to it, with its expressive power and its consistency with the rest of the language. If English was precise, concise, unambiguous, and consistent enough a notation, we wouldn't have many other programming languages. More specifically, I find list comprehensions (and generator expressions in general) very quick to get used to, I find that they read well once you have acquainted yourself with them, I find that they have a great ink to information ratio that justifies making that initial learning investment, and I find that they feel right at home in Python.
- randallsquared 19y agoAn arraylist is easier to traverse with respect to CPU cycles and memory usage (typically) than a linked list. What does python use internally? I don't know, and I'd just as soon decide that myself... Ah, here's a major difference between us: I'd rather not decide that myself, unless it becomes a problem.
- ltbarcly 19y agoI guess you never heard the one about premature optimization? And who in their right mind 'splices in native code' to java? You sound like you learned how to program from reading slashdot.