Las principales desventajas del lenguaje Python

El lenguaje de programación Python es famoso por su simplicidad y concisión. Una sintaxis simple y comprensible similar al pseudocódigo, así como una tipificación dinámica fuerte contribuyen al entrenamiento rápido e indoloro de los principiantes.


El intérprete de idiomas se encarga de todo el trabajo de bajo nivel, liberando al programador de la necesidad de administrar manualmente la memoria. La imposibilidad práctica de obtener una falla de segmentación, así como un conveniente sistema de excepción equipado con mensajes claros, le permiten depurar rápidamente los programas. Las situaciones en las que sus caídas debido a un error requieren una depuración profunda son bastante raras.


Los enteros irreemplazables y la seguridad al trabajar con contenedores de la biblioteca estándar hacen de Python un buen medio para ideas de pre-creación de prototipos, y una gran cantidad de bibliotecas matemáticas de alta calidad determinan el liderazgo de este lenguaje en los campos de aprendizaje automático, análisis de datos y computación científica.


Los programadores más sofisticados aprecian este lenguaje por las herramientas convenientes para construir tuberías retrasadas o, como dicen, perezosas. En Python, esta funcionalidad es implementada por iteradores, etc. generadores La biblioteca de programación asincrónica también es bastante buena.


Pero no todo con este lenguaje es fácil y simple. Además de una solución arquitectónica específica llamada GIL , incorporada en el intérprete principal del lenguaje CPythony los problemas asociados con la eficiencia de subprocesos múltiples, Python también tiene inconvenientes más fundamentales que limitan en gran medida su alcance.


Velocidad


, , . , , API , AOT-. , , C C++. , , NumPy, . — PyTorch.


, - . , , , Cython, , , .


, , . :


  • Python . Bash, Sh , . . : Linux.
  • . : sqlite3, Django ..
  • , , . Python API . : NumPy, CuPy, PyTorch ..

Python


:


  • .
  • .

CPython, :


typedef struct _object {
    Py_ssize_t ob_refcnt;
    PyTypeObject *ob_type;
} PyObject;

ob_refcnt , . , , , , . ob_type . , , , , , .


, . , .


Python, -, . , .


. , [100, 200, 300, 400, 500], , , , int, , . , , , . , , .



, , Python, . , , , Java , , , . , Java, — , JIT-?


(PyPy ..) Numba, , . , , Python — :


  • -,


    , , , . .


    - :


    >>> x = 3
    >>> x = '36'
    >>> 
    >>> def foo(a, b):
    >>>     if b:
    >>>         return [a]
    >>>     return a
    >>> 
    >>> foo(x, True)
    ['36']
    
    >>> foo(x, False)
    '36'
    
    >>> class Bar:
    >>>     __slots__ = ('baz',)
    >>> 
    >>> x = Bar()
    >>> x.baz = 332
    >>> x.baz
    332
    
    >>> x.baz = 'Some string'
    >>> x.baz
    'Some string'
    
    >>> foo(x, True)
    [<__main__.Bar at 0x10ff0d700>]

    , . , , , , — , .


  • .


    , , . , :


    >>> a = 5
    >>> b = True
    >>> 
    >>> if b:
    >>>     x = 100
    >>> x
    100
    
    >>> for i in range(10):
    >>>     for j in range(5):
    >>>         pass
    >>> print(i, j)
    9 4

  • . :


    >>> class Meta(type):
    >>>     def __new__(cls, name, bases, attrs):
    >>>         if list in bases:
    >>>             return super().__new__(cls, name, (tuple,), attrs)
    >>>         return super().__new__(cls, name, (list,), attrs)
    >>> 
    >>> class Foo(list, metaclass=Meta):
    >>>     pass
    >>> 
    >>> class Bar(tuple, metaclass=Meta):
    >>>     pass
    >>> 
    >>> issubclass(Foo, list)
    False
    >>> issubclass(Foo, tuple)
    True
    >>> issubclass(Bar, tuple)
    False
    >>> issubclass(Bar, list)
    True

    . , , , . , , , — , . .


    , , , .


    Foo Bar Meta, , . , list, , , tuple, —  list.


    .


  • , .


    >>> from collections.abc import Iterable
    >>> 
    >>> def wrap_class(cls):
    >>>     if issubclass(cls, Iterable):
    >>>         class FooCounter(cls):
    >>>             def count_foo(self):
    >>>                 return sum(1 for item in self if item == 'foo')
    >>> 
    >>>         return FooCounter
    >>>     raise TypeError(f'Class {cls} is not an iterable type')
    >>> 
    >>> wrap_class(list)([2, 3, 'foo', 'bar', 'baz', 'foo']).count_foo()
    2


Python. , MyPy, . , , . , , , typing , . , wrap_class -, .


, , Python 3.8, , , , , - .


, , , . , , Python Numba.



Python, : . , .


, . , , Julia. CPython —  .


Sea como fuere, Python es una gran herramienta para escribir código rápidamente. Sus amplias capacidades dinámicas, así como su comprensibilidad y, no tengo miedo de esta palabra, la belleza de la sintaxis está determinada por el hecho de que el proceso de compilación de programas realmente causa satisfacción. Sin embargo, como cualquier herramienta, este lenguaje tiene sus inconvenientes y es útil recordarlos antes de comenzar sus proyectos.


All Articles