Kerugian utama dari bahasa Python

Bahasa pemrograman Python terkenal karena kesederhanaan dan keringkasannya. Sintaksis yang sederhana dan mudah dipahami mirip dengan pseudo-code, serta pengetikan dinamis yang kuat berkontribusi pada pelatihan pemula yang cepat dan tidak menyakitkan.


Penerjemah bahasa menangani semua pekerjaan tingkat rendah, membebaskan programmer dari kebutuhan untuk manajemen memori manual. Ketidakmungkinan praktis untuk mendapatkan kesalahan segmentasi, serta sistem pengecualian yang nyaman dilengkapi dengan pesan yang jelas, memungkinkan Anda dengan cepat men-debug program. Situasi ketika jatuh karena kesalahan memerlukan debugging yang dalam sangat jarang.


Bilangan bulat dan keamanan yang tak tergantikan saat bekerja dengan wadah perpustakaan standar menjadikan Python cara yang baik untuk ide pra-prototyping, dan sejumlah besar perpustakaan matematika berkualitas tinggi menentukan kepemimpinan bahasa ini di bidang pembelajaran mesin, analisis data, dan komputasi ilmiah.


Pemrogram yang lebih canggih menghargai bahasa ini karena alat yang mudah digunakan untuk membangun jaringan pipa yang tertunda, atau, seperti yang mereka katakan, malas. Dalam Python, fungsi ini diimplementasikan oleh iterator dan sebagainya. generator. Pustaka pemrograman asinkron juga cukup bagus.


Namun tidak semuanya dengan bahasa ini mudah dan sederhana. Selain solusi arsitektur spesifik yang disebut GIL , yang terkandung dalam juru bahasa utama CPythondan masalah terkait dengan efisiensi multithreading, Python juga memiliki kelemahan mendasar yang sangat membatasi ruang lingkupnya.


Kecepatan


, , . , , 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 โ€”  .


Bagaimanapun, Python adalah alat yang hebat untuk menulis kode dengan cepat. Kemampuan dinamisnya yang luas, serta kelengkapannya dan, saya tidak takut dengan kata ini, keindahan sintaksis ditentukan oleh fakta bahwa proses penyusunan program di atasnya benar-benar menyebabkan kepuasan. Namun demikian, seperti alat apa pun, bahasa ini memiliki kelemahan dan berguna untuk mengingatnya sebelum memulai proyek Anda.


All Articles