рдкрд╛рдпрдерди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдЕрдкрдиреА рд╕рд╛рджрдЧреА рдФрд░ рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕рд┐рджреНрдз рд╣реИред рдЫрджреНрдо рдХреЛрдб рдХреЗ рд╕рдорд╛рди рдПрдХ рд╕рд░рд▓ рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд╡рд╛рдХреНрдп рд░рдЪрдирд╛, рд╕рд╛рде рд╣реА рд╕рд╛рде рдордЬрдмреВрдд рдЧрддрд┐рд╢реАрд▓ рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рддреНрд╡рд░рд┐рдд рдФрд░ рджрд░реНрдж рд░рд╣рд┐рдд рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдореЗрдВ рдпреЛрдЧрджрд╛рди рджреЗрддрд╛ рд╣реИред
рднрд╛рд╖рд╛ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╕рднреА рдирд┐рдореНрди-рд╕реНрддрд░реАрдп рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрддрд╛ рд╣реИ, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдореИрдиреБрдЕрд▓ рдореЗрдореЛрд░реА рдкреНрд░рдмрдВрдзрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдореБрдХреНрдд рдХрд░рддрд╛ рд╣реИред рдПрдХ рд╡рд┐рднрд╛рдЬрди рджреЛрд╖ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрд╕рдВрднрд╡рддрд╛, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╕реНрдкрд╖реНрдЯ рд╕рдВрджреЗрд╢реЛрдВ рд╕реЗ рд╕реБрд╕рдЬреНрдЬрд┐рдд рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЕрдкрд╡рд╛рдж рдкреНрд░рдгрд╛рд▓реА, рдЖрдкрдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдбрд┐рдмрдЧ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдЬрдм рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рдХреЗ рдХрд╛рд░рдг рдЙрдирдХреЗ рдЧрд┐рд░рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЧрд╣рд░реА рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рддреЛ рд╡реЗ рдХрд╛рдлреА рджреБрд░реНрд▓рдн рд╣реИрдВред
рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЕрдкреВрд░рдгреАрдп рдкреВрд░реНрдгрд╛рдВрдХ рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рдкрд╛рдпрдерди рдХреЛ рдкреВрд░реНрд╡-рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рд╡рд┐рдЪрд╛рд░реЛрдВ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рд╛рдзрди рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЙрдЪреНрдЪ-рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реЗ рдЧрдгрд┐рддреАрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рдорд╢реАрди рд╕реАрдЦрдиреЗ, рдбреЗрдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЗрд╕ рднрд╛рд╖рд╛ рдХрд╛ рдиреЗрддреГрддреНрд╡ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред
рдЕрдзрд┐рдХ рдкрд░рд┐рд╖реНрдХреГрдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╡рд┐рд▓рдВрдмрд┐рдд рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рднрд╛рд╖рд╛ рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛, рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, рдЖрд▓рд╕реА, рдкрд╛рдЗрдкрд▓рд╛рдЗрдиред рдкрд╛рдпрдерди рдореЗрдВ, рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдФрд░ рдЗрд╕реА рддрд░рд╣ рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред рдЬрдирд░реЗрдЯрд░ред рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рднреА рдмрд╣реБрдд рдЕрдЪреНрдЫреА рд╣реИред
рд▓реЗрдХрд┐рди рдЗрд╕ рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдЖрд╕рд╛рди рдФрд░ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИред рдЬреАрдЖрдИрдПрд▓ рдирд╛рдордХ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд╛рд╕реНрддреБрд╢рд┐рд▓реНрдк рд╕рдорд╛рдзрд╛рди рдХреЗ рдЕрд▓рд╛рд╡рд╛ , рднрд╛рд╖рд╛ рдХреЗ рдореБрдЦреНрдп рд╡реНрдпрд╛рдЦреНрдпрд╛рдХрд╛рд░ 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
тАФ .
рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдкрд╛рдпрдерди рдХреЛрдб рдлрд╛рд╕реНрдЯ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рд╛рди рдЙрдкрдХрд░рдг рд╣реИред рдЗрд╕рдХреА рд╡реНрдпрд╛рдкрдХ рдЧрддрд┐рд╢реАрд▓ рдХреНрд╖рдорддрд╛, рд╕рд╛рде рд╣реА рдЗрд╕рдХреА рд╕рдордЭ рдФрд░, рдореИрдВ рдЗрд╕ рд╢рдмреНрдж рд╕реЗ рдбрд░рддрд╛ рдирд╣реАрдВ рд╣реВрдВ, рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреА рд╕реБрдВрджрд░рддрд╛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░ рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрддреБрд╖реНрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рдмрдирддреА рд╣реИред рдлрд┐рд░ рднреА, рдХрд┐рд╕реА рднреА рдЙрдкрдХрд░рдг рдХреА рддрд░рд╣, рдЗрд╕ рднрд╛рд╖рд╛ рдХреА рдЕрдкрдиреА рдХрдорд┐рдпрд╛рдВ рд╣реИрдВ рдФрд░ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдиреНрд╣реЗрдВ рдпрд╛рдж рд░рдЦрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИред