On Thu, Dec 06, 2018 at 09:13:01PM -0500, Avi Gross wrote: > But so much code I see in python does not only reuse the same variable names > but in a confusing way. > > file = "some name" > file = open(file, "r") > file = some_wrapper(file)
I agree this is confusing: you have the same name, "file", used to mean a file name, an open file object, and whatever some_wrapper returns. This is not the clearest code I've ever seen. > mylist = [ ... ] > mylist = sorted(mylist) There's nothing wrong with that, except that it ought to be written: mylist = [ ... ] mylist.sort() to sort in place instead of making a sorted copy. > for index in range(...): > stuff > > for index in open(...) > more stuff Using "index" to iterate over the lines in a file is just a crappy choice of name. [...] > I have often seen something like this done with methods, such as to emulate > decorator functionality where a method is created in an object with a name > and the very next method created has the same name with the same function > name as an argument to replace it. I don't understand this. Can you show an example? Even if made up? > So is there a guide on when reuse is good and when it just obfuscates? What > is good practice? If you pick *meaningful* names, it will be pretty obvious when to reuse the same name: is the name still meaningful? Then you MAY reuse. If the name is not meaningful, then you MUST NOT reuse it, unless you are deliberately writing obfuscated code. If you have a name "column" which you use for a columns, then you shouldn't reuse it for rows, or lines of text read from a file, or the length of a list, or the date. But you can reuse it for another column, provided there's no confusion over which column is which. The same applies to any other language. -- Steve _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor