العيوب الرئيسية للغة بايثون

تشتهر لغة برمجة Python ببساطتها وإيجازها. إن بناء جملة بسيط ومفهوم مشابه للرمز الزائف ، بالإضافة إلى الكتابة الديناميكية القوية يساهم في تدريب المبتدئين بسرعة وبدون ألم.


يعتني مترجم اللغة بجميع الأعمال ذات المستوى المنخفض ، مما يحرر المبرمج من الحاجة إلى إدارة الذاكرة اليدوية. تسمح لك الاستحالة العملية للحصول على خطأ تجزئة ، بالإضافة إلى نظام استثناء مناسب مجهز برسائل واضحة ، بتصحيح البرامج بسرعة. الحالات التي تقع فيها السقوط بسبب خطأ تتطلب تصحيحًا عميقًا نادرة جدًا.


إن الأعداد الصحيحة التي لا يمكن الاستغناء عنها والأمان عند العمل مع حاويات المكتبة القياسية تجعل Python وسيلة جيدة لأفكار النماذج الأولية ، ويحدد عدد كبير من المكتبات الرياضية عالية الجودة ريادة هذه اللغة في مجالات التعلم الآلي وتحليل البيانات والحوسبة العلمية.


يقدر المبرمجون الأكثر تعقيدًا هذه اللغة لأدوات مناسبة لبناء خطوط أنابيب متأخرة أو ، كما يقولون ، كسولة. في Python ، يتم تنفيذ هذه الوظيفة من قبل المتكررين وما إلى ذلك. مولدات كهرباء. مكتبة البرمجة غير المتزامنة جيدة أيضًا.


ولكن ليس كل شيء بهذه اللغة سهل وبسيط. بالإضافة إلى حل المعماري معين يسمى GIL ، والتي تتجسد في مترجم الرئيسي للغة CPythonو ذات الصلة مشاكل مع كفاءة خاصية تعدد، لديها بيثون أيضا السلبيات أكثر الأساسية التي تحد كثيرا نطاقها.


سرعة


يُعتبر البطء هو السبب الرئيسي بين هذه الأشياء ، على الرغم من أن هذا يتم تحقيقه بدرجة معينة من العدالة من خلال حقيقة أن لغة البرمجة النصية لا تحتاج إلى السرعة. في المهام التي تتطلب أداءً عاليًا ، يعمل فقط كغلاف للتحكم في واجهة برمجة التطبيقات للمكتبات منخفضة المستوى المكتوبة بلغات تدعم تجميع 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 —  .


مع ذلك ، تعد Python أداة رائعة لكتابة التعليمات البرمجية بسرعة. قدراتها الديناميكية الواسعة ، وكذلك فهمها ، وأنا لست خائفا من هذه الكلمة ، يتم تحديد جمال النحو من حقيقة أن عملية تجميع البرامج عليها تسبب حقا الارتياح. ومع ذلك ، مثل أي أداة ، فإن هذه اللغة لها عيوبها ومن المفيد تذكرها قبل بدء مشاريعك.


All Articles