Die Hauptnachteile der Python-Sprache

Die Programmiersprache Python ist bekannt fĂŒr ihre Einfachheit und PrĂ€gnanz. Eine einfache und verstĂ€ndliche Syntax Ă€hnlich wie Pseudocode sowie eine starke dynamische Typisierung tragen zum schnellen und schmerzlosen Training von AnfĂ€ngern bei.


Der Sprachdolmetscher kĂŒmmert sich um die gesamte Arbeit auf niedriger Ebene und befreit den Programmierer von der Notwendigkeit einer manuellen Speicherverwaltung. Die praktische Unmöglichkeit, einen Segmentierungsfehler zu erhalten, sowie ein praktisches Ausnahmesystem mit klaren Meldungen ermöglichen Ihnen das schnelle Debuggen von Programmen. Situationen, in denen ein Sturz aufgrund eines Fehlers ein tiefgreifendes Debugging erfordert, sind recht selten.


Unersetzliche Ganzzahlen und Sicherheit bei der Arbeit mit den Containern der Standardbibliothek machen Python zu einem guten Mittel fĂŒr Ideen vor dem Prototyping, und eine große Anzahl hochwertiger mathematischer Bibliotheken bestimmt die FĂŒhrungsrolle dieser Sprache in den Bereichen maschinelles Lernen, Datenanalyse und wissenschaftliches Rechnen.


Anspruchsvollere Programmierer schĂ€tzen diese Sprache fĂŒr praktische Tools zum Erstellen verzögerter oder, wie sie sagen, fauler Pipelines. In Python wird diese FunktionalitĂ€t von Iteratoren usw. implementiert. Generatoren. Die asynchrone Programmierbibliothek ist auch ziemlich gut.


Aber nicht alles mit dieser Sprache ist einfach und unkompliziert. Neben einer spezifischen Architekturlösung namens GIL , die im Hauptinterpreter der Sprache enthalten ist, CPythonund den damit verbundenen Problemen mit der Effizienz des Multithreading weist Python auch grundlegendere Nachteile auf, die seinen Umfang stark einschrÀnken.


Geschwindigkeit


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


Wie auch immer, Python ist ein großartiges Werkzeug, um schnell Code zu schreiben. Seine breiten dynamischen FĂ€higkeiten sowie seine VerstĂ€ndlichkeit und, ich habe keine Angst vor diesem Wort, die Schönheit der Syntax werden durch die Tatsache bestimmt, dass der Prozess des Kompilierens von Programmen wirklich Zufriedenheit verursacht. Trotzdem hat diese Sprache wie jedes Tool ihre Nachteile und es ist nĂŒtzlich, sich diese zu merken, bevor Sie mit Ihren Projekten beginnen.


All Articles