'id' is a bad variable name in Python
Rise to the top 3% as a developer or hire one of them at Toptal: https://topt.al/25cXVn
--------------------------------------------------
Music by Eric Matyas
https://www.soundimage.org
Track title: Book End
--
Chapters
00:00 'Id' Is A Bad Variable Name In Python
00:11 Accepted Answer Score 6
00:26 Accepted Answer Score 194
00:51 Answer 3 Score 119
01:26 Answer 4 Score 64
01:45 Answer 5 Score 62
02:51 Answer 6 Score 10
03:48 Thank you
--
Full question
https://stackoverflow.com/questions/7755...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python
#avk47
ACCEPTED ANSWER
Score 195
id() is a fundamental built-in:
Help on built-in function
idin module__builtin__:id(...) id(object) -> integer Return the identity of an object. This is guaranteed to be unique among simultaneously existing objects. (Hint: it's the object's memory address.)
In general, using variable names that eclipse a keyword or built-in function in any language is a bad idea, even if it is allowed.
ANSWER 2
Score 119
In PEP 8 - Style Guide for Python Code, the following guidance appears in the section Descriptive: Naming Styles :
single_trailing_underscore_: used by convention to avoid conflicts with Python keyword, e.g.
Tkinter.Toplevel(master, class_='ClassName')
So, to answer the question, an example that applies this guideline is:
id_ = 42
Including the trailing underscore in the variable name makes the intent clear (to those familiar with the guidance in PEP 8).
ANSWER 3
Score 64
I might say something unpopular here: id() is a rather specialized built-in function that is rarely used in business logic. Therefore I don't see a problem in using it as a variable name in a tight and well-written function, where it's clear that id doesn't mean the built-in function.
ANSWER 4
Score 62
id is a built-in function that gives the identity of an object (which is also its memory address in CPython). If you name one of your functions id, you will have to say builtins.id to get the original (or __builtins__.id in CPython). Renaming id globally is confusing in anything but a small script.
However, reusing built-in names as variables isn't all that bad as long as the use is local. Python has a lot of built-in functions that (1) have common names and (2) you will not use much anyway. Using these as local variables or as members of an object is OK because it's obvious from context what you're doing:
Example:
def numbered(filename):
    with open(filename) as file:
        for i, input in enumerate(file):
            print("%s:\t%s" % (i, input), end='')
Some built-ins with tempting names:
idlist,dictmapall,anycomplex,intdirinputslicesummin,maxobjectfile(removed in Python 3.0)buffer(removed in Python 3.0)