On Wednesday 09 December 2015 09:58, Thomas 'PointedEars' Lahn wrote: > Mark Lawrence wrote: > >> On 03/12/2015 01:15, c.bu...@posteo.jp wrote: >>> I would like to know how this could be done more elegant/pythonic. >>> >>> I have a big list (over 10.000 items) with strings (each 100 to 300 >>> chars long) and want to filter them. >>> >>> list = ..... >>> […] [...] > However, “list” is a built-in class/constructor that would be overwritten > this way. One should choose another identifier than “list” for one’s > variables.
Correct, well mostly correct. The original built-in list is *not* overridden, as such, but shadowed: it still exists, but access to it is blocked by the local variable "list". The list *type* still exists, only the *name* list is shadowed. So you can easily recover from accidentally shadowing the name by deleting the local: del list To beginners, accidental shadowing of built-ins is a serious source of confusion. But to experts, intentional shadowing can be useful. There's nothing wrong with (say): def sort_and_pop(list): list.sort() list.pop(0) Yes, the local "list" shadows the built-in list. So what? More usefully, one can monkey-patch a module by shadowing a built-in in that module: # Python 3 only. import builtins def print(*args, **kwargs): log_something() builtins.print(*args, **kwargs) -- Steve -- https://mail.python.org/mailman/listinfo/python-list