¿Cuáles son algunas de las características de Python que lo hacen único en su propio idioma? [cerrado]

12

¿Cuáles son algunas de las características de Python que lo hacen único en su propio idioma? Estoy buscando cualquier tipo de características que van desde lo bueno a lo malo, lo útil hasta el impedimento, la sintaxis hasta el uso en el mundo real, pero las observaciones no oscuras serían las más útiles para el desarrollador promedio.

Soy nuevo aquí, por lo que es posible que haya que explicar las cosas intuitivas ...

    
pregunta John 30.12.2011 - 08:20

6 respuestas

20

Tendrá dificultades para encontrar funciones que sean absolutamente únicas . La mayoría de las características lingüísticas existentes han sido adoptadas en más de un idioma desde su inicio. Algunos pueden ser más raros, sobre todo porque son nuevos y aún están en la oscuridad, o se extinguieron por una buena razón. Sin embargo, incluso entonces sería mejor que vieras combinaciones de características.

Dicho esto, varias características de Python deberían ser una combinación relativamente única. Al menos no estoy al tanto de ningún idioma tan popular (y práctico) con un conjunto de características en su mayoría superpuestas. Como se señaló en los comentarios, Ruby está bastante cerca, pero sin embargo hay numerosas diferencias.

  • metaprogramación basada en metaclase . Básicamente, ejecutando código arbitrario en la creación de clases. Hace para muy buena personalización de clase con muy poco trabajo en el extremo de recepción, por ejemplo, para un Mapeo relacional de objetos (ORM), las clases de clientes se pueden escribir como de costumbre con unas pocas líneas adicionales como attr = SomeDataType() y se genera automáticamente una tonelada de código. Un ejemplo de esto son "modelos" de Django .
  • Le recomendamos que use iteradores para todo . Esto es especialmente evidente en 3.x, donde la mayoría de las alternativas basadas en listas con un equivalente basado en iteradores han sido abolidas a favor de estas últimas. Los iteradores también sirven como una interfaz casi universal para las colecciones (tanto las que realmente tiene en la memoria como las que solo necesita una vez y, por lo tanto, las crea a continuación). Agnóstico de la colección, eficiente en el espacio ( O(1) espacio para resultados intermedios a menudo sigue naturalmente, muy pocas tareas realmente necesitan todos los elementos en la memoria a la vez), el procesamiento de datos compilables nunca ha sido tan fácil.
  • Expresiones del generador, relacionadas con lo anterior. Muchos habrán oído hablar de las listas de comprensión (creando una lista de otro iterable, filtrando y mapeando en el proceso, con una sintaxis muy conveniente). Olvídate de ellos, son azúcar sintáctica, un caso especial. Las expresiones generadoras son muy cercanas en términos sintácticos y, en última instancia, dan como resultado la misma secuencia de elementos, pero producen resultados perezosamente (y, por lo tanto, ocupan O(1) espacio a menos que mantengas los resultados de manera explícita).
  • yield , que hace que los iteradores de escritura (aquí llamados generadores) sean mucho más agradables. Son el hermano mayor de los anteriores, que soportan todo tipo de flujo de control. C # tiene algo similar, con la misma palabra clave. Pero yield también está sobrecargado para soportar un tipo limitado de coroutines (Lua, por ejemplo, tiene un soporte más elaborado) que, sin embargo, ha sido bien utilizado por personas inteligentes que trabajan en problemas difíciles. Dos ejemplos de la parte superior de mi cabeza: Análisis de pendiente recursiva con retroceso y sin límite de pila y E / S asíncrona (con una sintaxis conveniente).
  • Asignación de objetivos múltiples y desempaquetado iterable. Asignación de esteroides. No solo puede asignar varios valores a la vez (incluso para intercambiar valores y al iterar - for key, value in mapping.items() ), puede desempaquetar cualquier iterable de longitud conocida (honestamente, principalmente tuplas) en múltiples variables. Desde 3.x es incluso práctico para colecciones de longitud desconocida, ya que puede especificar algunas variables tomando elementos individuales y uno tomando lo que queda: first, *everything_in_between, last = values .
  • Descriptores , probablemente la más poderosa entre las varias formas de personalizar el acceso a los atributos. Hay propiedades (como en C #, pero sin soporte de lenguaje especial), métodos estáticos, métodos de clase, etc., todos implementados como descriptores. También son objetos de primera clase. Hace apenas una semana, me enfrenté a un código repetitivo y complicado en las propiedades, por lo que escribí una pequeña función que genera la parte repetitiva y la envuelvo en un objeto propery .
  • Regla puramente de fuera de juego (indentaion para delimitar bloques). Pongo esto último intencionalmente. Aunque distingue a Python, en realidad no se destaca en la programación diaria una vez que estás acostumbrado (o al menos esa es mi experiencia).
respondido por el user7043 30.12.2011 - 10:27
3

Supongo que lo único que hace que Python sea único es la combinación particular de características que expone. Esto sería cierto para la mayoría de los lenguajes de programación.

O podría haber una pequeña cosa: no he visto la forma en que Python pasa explícitamente self como un parámetro formal a las funciones de miembro objeto en cualquier otro idioma. Es una cosa pequeña, y no veo cómo esto cambia nada realmente.

Pero no soy muy fluido en Python, ¡así que seguramente hay cosas que me faltan!

    
respondido por el Torbjørn 30.12.2011 - 09:56
1

El procesamiento automático de las cadenas de documentación para convertirse en propiedades de su propietario. En general, todas las brillantes características de introspección de Python lo convierten en un lenguaje único, desde la capacidad de usar help () hasta la capacidad de usar __doc__ como propiedad de primera clase de un objeto. Por ejemplo:

>>> class DocStringException(Exception):
...     """Error message is the same as docstring"""
...     def __str__(self):
...         return repr(self.__doc__)
... 
>>> class ExampleException(DocStringException):
...     """An example happened"""
... 
>>> raise ExampleException
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
__main__.ExampleException: 'An example happened'

Otras características útiles de introspección:

  • help / help (): ayuda con el intérprete / help con un objeto
  • palabras clave - palabras clave de python
  • locals (): obtenga los nombres locales
  • globals (): obtenga los nombres globales
  • dir (): obtenga las propiedades y los métodos de un objeto
  • el método .mro. , issubclass - entendiendo la herencia
  • id (): obtenga la dirección de memoria de un objeto
respondido por el kojiro 30.12.2011 - 14:54
1
  1. Generator Expressions
  2. input() Déjame explicarte, no he visto un idioma (hasta ahora), donde puedes asignar un valor a una declaración que imprime algo, es como print/gets de ruby, pero con un valor asignado a la impresión, en lugar de : print "Foo" bar = gets
  3. yield
  4. Muchos tipos de conjuntos de datos: ordereddict, namedtuple, array, list, tuple, dictionary
respondido por el Billjk 10.04.2012 - 15:19
-2

La cuestión es que Python se encuentra entre muy pocos lenguajes con una sobrecarga sintáctica extremadamente baja que le otorga tremendos poderes expresivos: listas / conjuntos / dictados de comprensión, rendimiento, decoradores, eval, programación de metaclases, introspección, estructuras de datos integradas optimizadas (listas, dictados, conjuntos), todas esas cosas conspiran de una manera muy agradable para darle (al desarrollador) el poder de expresar sus pensamientos en un código conciso y elegante casi tan rápido como pueda pensar. Realmente no puedo pensar en ningún otro idioma con este conjunto de características asesinas combinadas.

    
respondido por el Rabih 10.04.2012 - 15:07
-4

Yo diría que es uso de sangría para encerrar las declaraciones y los bucles. No lo he visto en ningún otro idioma.

Creo que es muy útil porque hace que sea mucho más difícil ofuscar el código de Python.

También parece ejecutarse de forma ordenada línea por línea con la excepción de las funciones, y puede interpretarse como tal, lo que es bueno.

    
respondido por el Liang 30.12.2011 - 10:24

Lea otras preguntas en las etiquetas