¿Por qué es malo el nombre de una variable id en Python?

  • La mayoría de las personas anexar un carácter de subrayado para los identificadores que chocan con builtins/palabras clave: id_, map_, list_, filter_, etc.
  • Una más astuto solución sería el uso de una variable ID.
  • Una mejor pregunta sería… ¿Qué genio pensamiento de uso común, nombre genérico para una función integrada que era una buena idea?
  • gracias ese comentario me ayudó en mi pregunta stackoverflow.com/questions/47939137/…
InformationsquelleAutor brian buck | 2008-09-16

8 Comentarios

  1. 121

    id() es fundamental incorporado:

    Ayuda en función integrada id en el módulo
    __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.)

    En general, el uso de los nombres de las variables que eclipse una palabra clave o una función integrada en cualquier idioma es una mala idea, incluso si es permitido.

    • OK, para ‘id’ tienes razón, pero el «en general…» comentario todavía se aplica, no crees?
    • Yo no se para el módulo globals sin duda. Para las variables restringidas a un ámbito local, así que usted puede ver la misma función no es nunca va a necesitar usar la integrada, no es algo que me preocuparía.
    • Buena captura, id estaba programado para la eliminación en un tiempo, pero finalmente se decidió no eliminar. Ya no soy capaz de editar mi comentario original, así que me voy a borrar para evitar confundir a la gente en el futuro.
    • Me gustaría que le había quitado. Qué mal denominado método! Un genérico, nombre común utilizado en miles de lugares (donde el contexto que le da sentido). Así que alguien decidió utilizarlo como un nombre global donde no hay ningún contexto?
    • Sorprendentemente, Google Python regex tutorial (developers.google.com/edu/python/regular-expressions) utiliza str = 'an example word:cat!!'. Hay algo en cualquiera de los PEPs que dice no hacerlo?
    • también numpy del np.array nombres el primer argumento object, seguir de cerca la incorporada en el tipo. He visto muchos ejemplos de esto, incluyendo, si no me equivoco, en los módulos estándar.
    • huy! .

  2. 48

    id es una función integrada que da la dirección de memoria de un objeto. Si el nombre de una de sus funciones id, usted tendrá que decir __builtins__.id para obtener el original. El cambio de nombre de id en el mundo es confuso en nada, pero un pequeño script.

    Sin embargo, la reutilización de la incorporada en los nombres de variables no está mal siempre y cuando el uso es local. Python tiene una mucho de funciones integradas que (1) tienen nombres comunes y (2) usted no va a usar mucho de todos modos. El uso de estas como variables locales o como miembros de un objeto es ACEPTAR porque es obvio en el contexto de lo que estás haciendo:

    Ejemplo:

    def numbered(filename):
      file = open(filename)
      for i,input in enumerate(file):
        print "%s:\t%s" % (i,input)
      file.close()

    Algunos construido-ins con el tentador nombres:

    • id
    • file
    • list
    • map
    • all, any
    • complex
    • dir
    • input
    • slice
    • buffer
    • PEP 8, que fue actualizado el 01-Ago-2013, ahora aconseja evitar la posible confusión, añadiendo simplemente _ al nombre de la variable. Por favor, consulte mi respuesta.
    • Vale la pena señalar que el id función que devuelve la dirección de memoria de un objeto es una CPython detalle de implementación. También vale la pena señalar que la función sólo está obligado a devolver un número diferente de cualquiera de los dos existente objetos. Si un objeto es la recolección de elementos, su identificación puede ser reciclado.
    • Me gustaría añadir object a tu lista de construido-ins con el tentador nombres.
    • es derecho. np.array‘s primer argumento el nombre es object
    • También, sum, min, max.
    • no debe llamar a las cosas hash, ya sea..

  3. 46

    En PEP 8 – Guía de Estilo de Python de Código, la siguiente guía aparece en la sección Descriptivo: El Nombramiento De Los Estilos De :

    • single_trailing_underscore_ : se utiliza por convención, para evitar conflictos
      con Python palabra clave, por ejemplo,

      Tkinter.Toplevel(master, class_='ClassName')

    Así que, para responder a la pregunta, un ejemplo que se aplica esta pauta es:

    id_ = 42

    Incluyendo al final el guión bajo en el nombre de la variable que hace que la intención clara (para aquellos familiarizados con la orientación en el uso de PEP 8).

    • Esto no contesta la pregunta, pero +1 por el PEP-8 de la convención de nomenclatura
  4. 41

    Me podría decir algo impopular aquí: id() es un lugar especializado integrado en la función que se utiliza muy poco en la lógica de negocio. Por lo tanto, no veo un problema en usarla como un nombre de variable en un apretado y bien escrita de la función, donde es claro que la identificación no significa que la función integrada.

    • En respuesta a: > id es un lugar especializado integrado en > función que es raramente usado en la > la lógica de negocio. Por lo tanto, no veo > un problema en usarla como una variable > nombre en un apretado y bien escrita > función, donde es claro que id > no significa que la función integrada. Si bien esto es cierto, es probablemente una buena idea para ser más específicos con este nombre de variable que simplemente «id». Muchas cosas han IDs (especialmente si estás trabajando con un RDBMS), y como la segunda línea de Tim Peters El Zen de Python nos dice: > Explícito es mejor que el implícito. Ver el resto mediante la ejecución de: import this
    • Yo todavía evitarlo si es posible, aunque. Incluso si no por otra razón que la de no escuchar a los compañeros de trabajo se quejan. 🙂
    • Estoy completamente de acuerdo: el nombramiento de una variable «id» en una pequeña función (y por tanto de alcance) es inofensivo. Muy pocas personas utilizan el id builtin de todos modos. Dicho esto, me tomó un rato, cuando un colega que hicieron caso omiso de los list builtin con una variable local. Así que la regla general de la gente de otros mencionar todavía tiene sentido.
  5. 4

    Es malo para el nombre de cualquier variable después de una función integrada. Una de las razones es porque puede ser confuso para un lector que no conoce el nombre se sustituye.

  6. 2

    ‘id’ es un método integrado en Python. La asignación de un valor a ‘id’, se sobrescribe el método. Es mejor usar un identificador de antes, como en «some_id» o usarla en distintas capitalización método.

    El construido en el método toma un único parámetro y devuelve un entero para la dirección de memoria del objeto que se pasa.

    >>>id(1)

    9787760

    >>>x = 1

    >>>id(x)

    9787760

    • tenga en cuenta que usted puede poner el nombre de un atributo de clase o método ‘id’, que no toque el construido en la función.
  7. -6

    Porque python es un lenguaje dinámico, no es generalmente una buena idea para dar a una variable y una función con el mismo nombre. id() es una función en python, por lo que se recomienda no utilizar una variable llamada id. Teniendo eso en cuenta, que se aplica a todas las funciones que se pueden utilizar… una variable no debería tener el mismo nombre que una función.

    • «Porque python es un lenguaje dinámico, no es generalmente una buena idea para dar a una variable y una función con el mismo nombre.» – Usted no puede dar a una variable y una función con el mismo nombre. Nada que ver con que es un lenguaje dinámico. Si te refieres a dar propiedades de la misma, nombres de otros objetos en el mismo ámbito, también estoy en desacuerdo. Usted puede tener una clase llamada «Clave», una instancia de esa clase que se llama «clave» y una propiedad de otro objeto llamado «clave», por ejemplo, «de la puerta.clave».

Dejar respuesta

Please enter your comment!
Please enter your name here