As principais desvantagens da linguagem Python

A linguagem de programação Python é famosa por sua simplicidade e concisão. Uma sintaxe simples e compreensível semelhante ao pseudo-código, bem como uma forte digitação dinâmica, contribuem para o treinamento rápido e indolor dos iniciantes.


O intérprete de idiomas cuida de todo o trabalho de baixo nível, liberando o programador da necessidade de gerenciamento manual de memória. A impossibilidade prática de obter uma falha de segmentação, bem como um sistema de exceção conveniente, equipado com mensagens claras, permitem depurar programas rapidamente. Situações em que suas quedas devido a um erro requerem depuração profunda são bastante raras.


Inteiros insubstituíveis e segurança ao trabalhar com os contêineres da biblioteca padrão fazem do Python um bom meio de pré-prototipar idéias, e um grande número de bibliotecas matemáticas de alta qualidade determina a liderança dessa linguagem nos campos de aprendizado de máquina, análise de dados e computação científica.


Programadores mais sofisticados apreciam essa linguagem por ferramentas convenientes para a construção de dutos atrasados ​​ou, como costumam dizer, preguiçosos. No Python, essa funcionalidade é implementada por iteradores e assim por diante. geradores. A biblioteca de programação assíncrona também é muito boa.


Mas nem tudo nesse idioma é fácil e simples. Além de uma solução arquitetônica específica chamada GIL , incorporada no principal intérprete da linguagem CPythone problemas relacionados à eficiência da multithreading, o Python também possui desvantagens mais fundamentais que limitam muito seu escopo.


Rapidez


, , . , , 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 —  .


Seja como for, o Python é uma ótima ferramenta para escrever código rapidamente. Suas amplas capacidades dinâmicas, assim como sua compreensibilidade e, não tenho medo dessa palavra, a beleza da sintaxe são determinadas pelo fato de que o processo de compilação de programas realmente causa satisfação. No entanto, como qualquer ferramenta, essa linguagem tem suas desvantagens e é útil lembrá-las antes de iniciar seus projetos.


All Articles