- рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХрд┐рддрдиреЗ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
- рдПрдХ рд╕реМред рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд┐рдЦ рджреЗрдЧрд╛, рдФрд░ 99 рдХрд╣реЗрдВрдЧреЗ рдХрд┐ рд╡реЗ рдХреНрдпрд╛ рдмреЗрд╣рддрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рди рдХреЗрд╡рд▓ рднрд╛рд╖рд╛ рдкрд░, рдмрд▓реНрдХрд┐ CPython рдФрд░ рдЗрд╕рдХреЗ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╡рд┐рд╡рд░рдгреЛрдВ рдкрд░ рднреА рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╛рдпрдерди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдорд▓реНрдЯреАрдереНрд░реЗрдбреЗрдб, рддреЗрдЬрд╝, рдпрд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдорд░реНрдерд┐рдд рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдФрд░ рдХреНрдпреЛрдВ рдЗрддрдирд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╡реИрдХрд▓реНрдкрд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (PyPy, Cython, Jython, IronPython, Python for .NET, Parakeet, Nuitka, Stackless, Unladen Swallow), рдЬрд┐рдирдореЗрдВ рд╕реЗ рдЖрдзреЗ рдкрд╣рд▓реЗ рд╣реА рдорд░ рдЪреБрдХреЗ рд╣реИрдВ; рдФрд░ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдиреЗ рд╕рдордЭрд╛ рдХрд┐ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЬреАрд╡рд┐рдд рд░рд╣рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдШрд░реНрд╖ рдЬреАрддрдиреЗ рдХрд╛ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдХреНрдпреЛрдВ рдирд╣реАрдВ рдерд╛ред рд╣рд╛рдВ, GDScript рд╣реИ, рдЬрд┐рд╕реЗ рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдирд┐рдо рд╣реИ, рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрджреНрдпреЛрдЧ рдХреА рднрд╛рд░реА рдЬрдбрд╝рддрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ рдЕрдЧрд▓реЗ 10 рд╡рд░реНрд╖реЛрдВ рдореЗрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЬрдЧрд╣ рдкрд░ рдирдИ рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рдХрдмреНрдЬрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдореВрд▓ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП, рдФрд░ рдирдП рдФрд░ рдкреБрд░рд╛рдиреЗ-рд╢реИрд▓реА рдХреЛрдб рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддреЗ рд╣реБрдП, рд▓реЗрдЦрди рдХреЛрдб рдХреА рд╢реИрд▓реА рдХреЛ рдмрджрд▓рдХрд░ рдЕрдЬрдЧрд░ рдХреЛ рдкреНрд░рднрд╛рд╡реА рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ CPython рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛, рди рдХрд┐ рдЗрд╕рдХреЗ рдирд┐рдХрдЯрддрдо рдкреНрд░рддрд┐рджреНрд╡рдВрджреНрд╡реА PyPy рдХреЗ рдмрд╛рдж рд╕реЗ, PyPy рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ CPython рдХреА рд╕рднреА рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреВрджрддрд╛ рд╣реИред
рдореИрдВ рд╕рд╛рдд рд╕рд╛рд▓ рдХреЗ рдЕрдиреБрднрд╡ рд╡рд╛рд▓рд╛ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реВрдВ, рдЬреЛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╡реЗрдм рдФрд░ рдорд▓реНрдЯреА-рдереНрд░реЗрдбреЗрдб рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░ рдЬреЛрд░ рджреЗрдиреЗ рдХреЗ рд╕рд╛рде рдбреЗрд╕реНрдХрдЯреЙрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд▓рдЧрд╛ рд╣реБрдЖ рд╣реИред рдЖрдк рдкреВрдЫрддреЗ рд╣реИрдВ, "рдПрдХ рдорд┐рдирдЯ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕, рд╡реЗрдм рдореЛрд░реНрдЪреЛрдВ рдФрд░ рдорд▓реНрдЯреАрдереНрд░реЗрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЕрдЬрдЧрд░ рдореЗрдВ рдХреНрдпрд╛ рдЖрдо рд╣реИ?" рдФрд░ рдореИрдВ рдЬрд╡рд╛рдм рджреВрдВрдЧрд╛ "рдпрд╣реА рд╣реИ - рдХреБрдЫ рднреА рдирд╣реАрдВред" рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реА, рдбреЗрд▓реНрдлреА, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдПрд╕рдХреНрдпреВрдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдореИрдВ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрд╣реБрдд рдЦреБрд╢ рдирд╣реАрдВ рдерд╛, рдФрд░ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рдПрд░рд┐рдХ рд╕реНрдиреЛ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдереА, рдЬреЛ рд╕реАрдкреАрдереЙрди рдореЗрдВ рдХрдИ рджреБрднрд╛рд╖рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
https://www.python.org/dev/peps/pep-0554/
https://github.com/ericsnowcurrently/multi-core-python
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╕рдордЭ рдЬрд▓реНрджреА рдЖ рдЧрдИ рдХрд┐:
- рд╕реАрдкреАрдереЙрди рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреА рд▓реЛрдХрдкреНрд░рд┐рдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдЦрд░рд╛рдм рд╕рдорд░реНрдерди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдкреБрд░рд╛рдиреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИ рдЬреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп рд╕рд╛рдордиреЗ рдЖрддрд╛ рд╣реИред рдирддреАрдЬрддрди, рдПрд░рд┐рдХ рдХрдИ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдкреНрд░рдЧрддрд┐ рдХреЗ рд╕рд╛рде рджреБрднрд╛рд╖рд┐рдпрд╛ рдЙрдард╛ рд░рд╣рд╛ рд╣реИ;
- рдХрдИ рджреБрднрд╛рд╖рд┐рдпреЛрдВ рдХреЗ рд╕рдлрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рдж рднреА, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдЧреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдкреАрдИрдкреА рд╕рд░рд▓ рдЪреИрдирд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЙрдкрдХрд░рдг рдЦрддрд░рдирд╛рдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХрд╛рд░реНрдп рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдардВрдб рдФрд░ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рдЦрддрд░реЗ рд╣реЛрддреЗ рд╣реИрдВ;
- рднрд╛рд╖рд╛ рдореЗрдВ рд╣реА рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ рдЬреЛ рджреБрднрд╛рд╖рд┐рдпреЛрдВ рдХреЛ рд╕реАрдзреЗ рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдФрд░ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рдирд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдХреБрдЫ рдЧрд╛рд░рдВрдЯреА рджреЗрдиреЗ рд╕реЗ рд░реЛрдХрддреА рд╣реИрдВред
рдЕрдм рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗред
рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╡рд░реНрдЧ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ
рд╣рд╛рдВ, рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдЬрдЧрд░ рдХреА рдХрдХреНрд╖рд╛ рдХреЛ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд▓рд╛рдирдд рд╣реИ, рдХреНрдпреЛрдВ рдЪрд░ рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛? рдкреБрд░рд╛рдиреА рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рдирдП рддрд░реАрдХреЗ рдХреНрдпреЛрдВ рдЬреЛрдбрд╝реЗрдВ? рдЖрдк рдХрд┐рд╕реА рднреА рдЬрд╛рд╡рд╛ рдореЗрдВ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдмрд╛рд╣рд░ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдЪрд░ рдХреА рдШреЛрд╖рдгрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдЬрдЧрд░ рдореЗрдВ рдРрд╕рд╛ рдХреЛрдИ рдкреНрд░рддрд┐рдмрдВрдз рдирд╣реАрдВ рд╣реИ (рдФрд░ рдЬрд╛рд╡рд╛ рд╕реЗ рдкрд╣рд▓реЗ рдЕрдЬрдЧрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдЖрдкрдХреЛ рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рдорд╛рди рддрд░реАрдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреИрдВрд╕рд░ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдЭреБрдХрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ - рдЗрд╕рдХреЗ рд▓рд┐рдП type.MethodType, function .__ get__, functionalools.partial, рдФрд░ рдЗрд╕реА рддрд░рд╣ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рдЕрдЬреАрдм рд╕рд╡рд╛рд▓ рдкреВрдЫрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ: рдЕрдЬрдЧрд░ рдХреЛ рддрд░реАрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдХрд░реАрдм рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрд▓рд╛рд╕ рдХреЗ рддрд░реАрдХреЗред рдХрд╛рд░рдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ: рдЧреБрдЗрдбреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдирд╛рдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдирд╣реАрдВ рдЖрдпрд╛ рдерд╛ (рддрд╛рдХрд┐ рдХреЛрдИ gtk_button_set_focus_on_click рдирд╣реАрдВ рд╣реИ), рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдПрдХ рдЫреЛрдЯреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЧреБрдЪреНрдЫрд╛ рд╕реЗ рдЗрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЪрдпрди рдХреИрд╕реЗ рдХрд░реЗрдВред рдлрд┐рд░ рднреА, len, iter, next, isinstance, slice, dict, dir, str, repr, hash, рдЯрд╛рдЗрдк рдЕрдЬрдЧрд░ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдП - рдЕрдм рдпреЗ рдирд╛рдо рдореЗрдВ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХреЗ рд╕рд╛рде рд╕рдВрдмрдВрдзрд┐рдд рд╡рд░реНрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд░реИрдкрд░ рд╣реИрдВ, рдФрд░ рдПрдХ рдмрд╛рд░ рдирд┐рд░реНрдорд┐рдд рд╕рд░рд▓ рдкреНрд░рдХрд╛рд░ рдирд╣реАрдВ рдереЗ рдХрдХреНрд╖рд╛рдПрдВ рдФрд░ рдХреЗрд╡рд▓ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ рд╡рд┐рдзрд┐ (рдСрдмреНрдЬреЗрдХреНрдЯ) рдФрд░ object.method рдХреА рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЗ рдмреАрдЪ рдмрд╣реБрдд рдЕрдВрддрд░ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ - рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ рд╡рд┐рдзрд┐ рдПрдХ рд╕реНрдерд┐рд░ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рддрд░реНрдХ (рд╕реНрд╡) рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ рдЧрддрд┐рд╢реАрд▓ рд╡рд░реНрдЧ рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ:
- рдореЙрдбреНрдпреВрд▓рд░ рдкрд░реАрдХреНрд╖рдг рди рджреЗрдВред рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд┐рдП рдЧрдП рдХреЛрдб рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдкреВрд░реА рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдЪрд▓рдиреЗ рдкрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рджреЗ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ CPython рдХреЗ рднреАрддрд░ рд╕реЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛;
- рдЕрдиреБрдХреВрд▓рди рдХреА рдорд╣рд╛рди рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдгред рдПрдХ рд╡рд░реНрдЧ рдШреЛрд╖рдгрд╛ рдЖрдкрдХреЛ рд╡рд░реНрдЧ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддреА рд╣реИред рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, PyPy рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╕рдлрд▓ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝рд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЬрд╛рдВрдЪ рдкрджреНрдзрддрд┐ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдХреНрд░рдо рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ;
- рд╕рдорд╛рдирд╛рдВрддрд░ рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд╕рд╛рде рдбреЙрдХ рди рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╣реА рдмрд╣реБрд╕рдВрдХреЗрддрди рд╡рд░реНрдЧ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреА рдкреНрд░рддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЕрдЧрд░, рднрдЧрд╡рд╛рди рди рдХрд░реЗ, рдХрд┐рд╕реА рдПрдХ рдкреНрд░рддрд┐рдпреЛрдВ рдореЗрдВ рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рдмрджрд▓ рджреЗрдВ, рддреЛ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХрд╛ рдЬреЛрдЦрд┐рдо рдХрдо рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдбрд╛рдпрдиреЗрдорд┐рдХ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдПрдХ рдЕрдзрд┐рдХ рд╕реВрдХреНрд╖реНрдо рд╕рдВрд╕реНрдХрд░рдг __getattribute__, __getattr__, рдФрд░ рдЕрдиреНрдп рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд╣реБрдВрдЪ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд░рд╣рд╛ рд╣реИред рдЕрдХреНрд╕рд░ рдЙрдиреНрд╣реЗрдВ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЧреЗрдЯрдЯрд░-рд╕реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдПрдХ рдлреАрд▓реНрдб рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕реМрдВрдкрдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдХрднреА-рдХрднреА рдПрдХ рдбреАрдПрд╕рдПрд▓ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдЗрди рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЕрдзрд┐рдХ рд╕рднреНрдп рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдмрд┐рдирд╛ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЗ рдПрдХ рд╡рд░реНрдЧ рдореЗрдВ рдмрджрд▓рдХрд░, рдЬрд┐рдирдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрдирд╛ рдХрднреА-рдХрднреА рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрддрд╛ рд╣реИред рд╡реИрд╕реЗ, рдЧреЗрдЯрд░реНрд╕ / рд╕реЗрдЯрд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдРрд╕рд╛ рддрдВрддреНрд░ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ - рдпреЗ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд┐рд╡рд░рдг рд╣реИрдВ: https://www.python.org/dev/peps/pep-0252/#id5
рдбреАрдмрдЧрд┐рдВрдЧ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдХреЛрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдУрдВ рдХреА рд╣реЙрдЯ рд╕реНрд╡реИрдкрд┐рдВрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЙрдкрдХрд░рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдПрдХ рд╡рд┐рд░реВрдкрдг рд╕рд╛рдХреНрд╖реНрдп рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕рдВрдХрд▓рд┐рдд рдХрдХреНрд╖рд╛рдПрдВ рдХреЗрд╡рд▓ рдПрдХ рдЫреЛрдЯрд╛ рдХрджрдо рд╣реИ рдЬрд┐рд╕реЗ рд╕рд╛рдЗрдереЙрди рдФрд░ рдиреБрддреНрдХрд╛ рдкрд╣рд▓реЗ рд╣реА рд▓реЗ рдЪреБрдХреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдиреНрдп рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдЕрдХреЗрд▓реЗ рдпрд╣ рдХрджрдо рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЧрддрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рднреА рдХреЛрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рднрд╛рд╡ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЬрдЧрд░ рдЧрддрд┐рд╢реАрд▓ рдЧрддрд┐рд╢реАрд▓ рдмрдВрдзрди рдХрд╛ рд╡реНрдпрд╛рдкрдХ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд╣реАрдВ рдирд╣реАрдВ рд╣реИ рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб рдореЗрдВ рджреВрд░ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИред
рдПрдХрд╛рдзрд┐рдХ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЯреЛрдкреА рдкрд░реЗрдб рдХрд╛ рдиреЗрддрд╛ рд╣реИред рдпрд╣ рдЕрдЬрдЧрд░ рдФрд░ рдЙрд╕рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╕реА-рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕реНрддрд░ рдкрд░ рднреА рдирд╣реАрдВ рд╣реИред "рд▓реЗрдХрд┐рди рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?" рдЖрдк рдЖрдкрддреНрддрд┐ рдХрд░рддреЗ рд╣реИрдВред рд╕рдВрдХрд▓рди рдореЗрдВ рдЗрди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдмрд╛рдж рдХреЗ рд╕реНрдереИрддрд┐рдХ рд╕рддреНрдпрд╛рдкрди рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреА рдХреЙрд▓рд┐рдВрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреА рднреВрдорд┐рдХрд╛ рдореЗрдВ C ++ рдФрд░ Java рдореЗрдВ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╕рд╛рде рд╣реА рдЙрди рддрд░реАрдХреЛрдВ рдХреЗ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рдордп рдореЗрдВ рд╕реНрд░реЛрдд рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдкрддрд╛ рд╣реИред рдпреЗ рднреВрдорд┐рдХрд╛рдПрдВ рдЕрдЬрдЧрд░ рдореЗрдВ рд▓рдЧрднрдЧ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦреЛ рдЬрд╛рддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдирдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХрд╛ рдХреЛрдИ рдФрдЪрд┐рддреНрдп рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдЧреЛ рдореЗрдВ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рд╡рд╣ рдкрд╕рдВрдж рд╣реИ - рдпрд╣ рдЕрдЬрдЧрд░ рдПрдмреАрд╕реА рдХреЗ рд╕рдорд╛рди рд╣реИ: https://www.python.org/dev/peps/pep-3119
рдПрдХрд╛рдзрд┐рдХ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рд╕рдорд╛рдирд╛рдВрддрд░рдХрд░рдг рдФрд░ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реАрдзреА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдб рдХреА рдкрдардиреАрдпрддрд╛ рдФрд░ рд╕реНрдерд┐рд░рддрд╛ рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рддрд╛ рд╣реИ - рдпрд╣ рддрдерд╛рдХрдерд┐рдд рд▓рд╛рд╕рдЧрдирд╛ рдХреЛрдб (рд╕реНрдкреЗрдЧреЗрдЯреА рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рд╛рджреГрд╢реНрдп рджреНрд╡рд╛рд░рд╛) рд╣реИред
рдЬрдирд░реЗрдЯрд░
рдпрд╣ GoTo рдХрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкреЗрдХреНрд╖рд┐рдд рдорд╛рдорд▓рд╛ рд╣реИ, рдЬрдм рдирд┐рд╖реНрдкрд╛рджрди рдХреЗрд╡рд▓ рдХреЛрдб рдкрд░ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рд░реВрдк рд╕реЗ рдХреВрджрддрд╛ рдирд╣реАрдВ рд╣реИ - рдпрд╣ рдвреЗрд░ рдХреЗ рд╕рд╛рде рдХреВрджрддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рднрдпрдВрдХрд░ рдЦреЗрд▓ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЬрдирд░реЗрдЯрд░ рд╕рдВрджрд░реНрдн рдкреНрд░рдмрдВрдзрдХреЛрдВ (рд╣реЗрд▓реЛ рдкреАрдИрдкреА 567) рдХреЗ рд╕рд╛рде рдЕрдВрддрд░ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЬреБрдбрд╝реЗ рдореНрдпреВрдЯреЗрдВрдЯ рд░рд╛рдЬреНрдпреЛрдВ рдХреА рдПрдХ рддрдВрдЧ рдЧреЗрдВрдж рдореЗрдВ рдЖрд╡реЗрджрди рдХреЛ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЬрдЧрд░ рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╡реГрддреНрддрд┐ рд╣реЛрддреА рд╣реИ рдЬреЛ рдкрд░реАрдХреНрд╖рдг, рд╕рдорд╛рдирд╛рдВрддрд░рдХрд░рдг рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдЕрдиреБрдХреВрд▓рди рдпреБрджреНрдзрд╛рднреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЬрдЧрд╣ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдЬрдирд░реЗрдЯрд░ рдЗрд╕ рдХреЗрдХ рдкрд░ рдПрдХ рдЪреЗрд░реА рд╣реИрдВред
рдЖрдкрдХреЛ рдХреНрдпрд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рд╣реЛрдЧрд╛:
import contextlib
@contextlib.contextmanager
def context_manager():
try:
print('')
yield
finally:
print('')
def gen_in_manager():
m = context_manager()
with m:
for i in range(5):
yield i
g1 = gen_in_manager()
next(g1)
print('')
, :
import contextlib
@contextlib.contextmanager
def context_manager():
try:
print('')
yield
finally:
print('')
def gen_in_manager():
m = context_manager()
with m:
for i in range(5):
yield i
def test():
g1 = gen_in_manager()
next(g1)
test()
print('')
.
, , : async/await, .
: RPython -. , . , , .
https://stackoverflow.com/questions/530530/python-2-x-gotchas-and-landmines
>>> a = ([42],)
>>> a[0] += [43, 44]
TypeError: 'tuple' object does not support item assignment
>>> a
([42, 43, 44],)
>>> a = ([42],)
>>> b = a[0]
>>> b += [43, 44]
>>> a
([42, 43, 44],)
>>> x = y = [1,2,3]
>>> x = x + [4]
>>> x == y
False
>>> x = y = [1,2,3]
>>> x += [4]
>>> x == y
True
>>> x = [[]]*5
>>> x
[[], [], [], [], []]
>>> x[0].append(0)
>>> x
[[0], [0], [0], [0], [0]]
, ┬л'tuple' object does not support item assignment┬╗ : . , , , , . , , x[0].append(0) , CPython , . , .
тАФ [] ? , , . , Clojure , - partial-copy-on-write . , .
? , , . , copy-on-write , : b.append.., b[].., b +=тАж : , , тАФ , , . , , , , // , .
copy-on-write? , , (), ( ), , .
- . ? , copy-on-write, ┬л({'first': 1, 'second': 2},)┬╗, , , , , , ┬л{'first': 1, 'second': 2}┬╗.
https://ru.wikipedia.org/wiki/_()
┬л тАФ ┬╗
: https://en.wikipedia.org/wiki/Multiple_dispatch#Use_in_practice
, 13тАУ32% (a.k.a. ), 2.7тАУ6.5% тАФ . : , , , . , , .
, тАФ , . , , . , double char, , double .
float a = 2.0;
float *src = &a;
char *dest = malloc(sizeof(float));
memcpy(dest, src, sizeof(float));
printf("%f", *(double*)dest);
, (, , ) тАФ - , , , .
, ( ) . : ┬лa = b + c┬╗, , . ?
- : ┬лif (Py_TYPE(obj) == &PyLong_Type) {long val = PyLong_AsLong...}┬╗ type();
- : ┬лPyArg_ParseTuple()┬╗ , ┬лthis.number = int(param1); this.text = str(param2)┬╗ тАФ , . , , ( , );
- // . тАФ .
, . , ? CPython, , , , , . , : . , ? : , / , / . C ┬лa = b + c┬╗ ( , ):
def PyNumber_Add(b, c):
slotb = b.__add__
if not type(b) is type(c) and c.__add__:
slotc = c.__add__
if slotc is slotb:
slotc = None
if slotb:
if slotc and isinstance(c, b.__class__):
return slotc(b, c)
else:
return slotb(b, c)
else:
return slotb(b, c)
if isinstance(b, str) and isinstance(c, str):
a = unicode_concatenate(b, c)
else:
a = PyNumber_Add(b, c)
, , . ┬л ┬╗ тАФ , , , , . , , , ┬л ┬╗, ┬л┬╗, ┬л┬╗, ; тАФ .
: , . , . : , . , , тАФ .
, . , , . , - , .
, , ( ), ( ), . , , ( ). , , тАФ , ? .
тАФ : , . , , . , , - , , : . , , тАФ MRO:
https://www.python.org/download/releases/2.3/mro/
https://ru.wikipedia.org/wiki/C3-
, 3.4 ┬л ┬╗ ( Argument тАФ Monty Python ), . ┬л ┬╗тАж , : 3.4 2014, 1991.
. , (trait) Rust ( , , , , ):
https://doc.rust-lang.org/1.8.0/book/traits.html
, , , , , . ┬л┬╗. , , . , - , , Rust-. , __iter__ тАФ ┬л┬╗. , , , , . , ┬л - , ┬╗. , , C++ ranges, , , .
:
from collections.abc import Iterable, Container
from itertools import filterfalse
class MyList(Trait, Iterable, Container):
pass
def __sub__(a: MyList, b: object):
return list(filterfalse(lambda x: x == b, a))
def __sub__(a: MyList, b: Container):
return list(filterfalse(lambda x: x in b, a))
a = MyList([1, 2, 3, 4, 5])
print(a - [2, 5]) # , print(__sub__(a, b))
# : [1, 3, 4]
print(a - 3)
# : [1, 2, 4, 5]
MyList, Iterable ( __iter__) Container ( __contains__), list, list MyList, MyList list, list MyList. :
from collections.abc import Container
from itertools import filterfalse
class MyList(list):
def __sub__(self, b):
if isinstance(b, Container):
return list(filterfalse(lambda x: x in b, a))
else:
return list(filterfalse(lambda x: x == b, a))
a = MyList([1, 2, 3, 4, 5])
print(a - [2, 5])
# : [1, 3, 4]
print(a - 3)
# : [1, 2, 4, 5]
: , ┬лa┬╗, . ┬л ┬╗, -, .
, тАФ , , , . , , .
, , . , , , , , , . - , тАФ - , . :
>>> a = [1, 2, 3]
...
>>> a = '15'
...
>>> for i in map(lambda x: x*2, a):
>>> print(i)
11
55
2
4
6
.
, , . None тАФ , NoneType. , тАФ , - , . :
>>> class A():
>>> def __init__(self, value):
>>> self.val = value
>>>
>>> a = A('2')
>>> a.val = []
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only assign str (not "list") to str
>>> a.myattr = []
>>> a.myattr = 2
A val, . , - (myattr) тАФ , , .
, . тАФ , , . , :
>>> class A():
>>> def __init__(self, value):
>>> self.val = value
>>>
>>> def func():
>>> a = A(None)
>>> a.val = 2
>>> print(a.__dict__)
>>>
>>> func()
{'val': 2}
A<None or Int>, . , , .
: , : , , , ┬л-┬╗, ┬л┬╗. тАФ , ; - , , , , . , , ┬лlist┬╗, , , list comprehension, , , BUILD_LIST LIST_APPEND ( CPython) тАФ ? , ┬л ┬╗, ┬л - ┬╗.
, - () , ┬лa.val = int(newval)┬╗. , , , . , __setattr__ __setattribute__, c 2.2 __set__ ( https://www.python.org/dev/peps/pep-0252/ ). : , , тАФ C++/Java/C#. , : __set__, __get__, __delete__, , :
>>> a = StrictDict({'first': 1 })
>>> a = { 'dummy': 666 }
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StrictDictError: "first" key is missing in the assignment source
, ( ┬л ┬╗): copy-on-write , , -, copy-on-write :
>>> a = COWList([1, 2, 3])
>>> b = a
>>> a.append(4)
>>> b.append(5)
>>> a
[1, 2, 3, 4]
>>> b
[1, 2, 3, 5]
, CPython , ┬л┬╗:
https://github.com/python/cpython/blob/master/Objects/typeobject.c#L5074
, __slots__ . , , , , , , , , . ( ) . , : __slots__ , PyHeapTypeObject->ht_slots, __dict__, PyTypeObject->tp_dictoffset. , .
, , . , , , , , ┬л , ; тАФ "", ""┬╗, . , , . ┬л<> = new <>()┬╗, ┬лvar = new <>()┬╗. , ReasonML , , тАФ JS , , .
PyPy, V8 JavaScript LuaJIT, , . - , , . AOT , asm.js, WebAssembly, PNaCl.
:
- Bauer, A.M. and Saal, H.J. (1974). Does APL really need run-time checking? Software тАФ Practice and Experience 4: 129тАУ138.
- Kaplan, M.A. and Ullman, J.D. (1980). A scheme for the automatic inference of variable types. J. A CM 27(1): 128тАУ145.
- Borning, A.H. and Ingalls, D.H.H. (1982). A type declaration and inference system for Smalltalk. In Conference Record of the Ninth Annual ACM Symposium on Principles of Programming Languages (pp. 133тАУ141)
- https://ru.wikipedia.org/wiki/Standard_ML тАФ 1984 .
, Standard ML , , .
, - , . , , тАФ , , ( ), :
- Frank Pfenning. (1988). Partial polymorphic type inference and higher-order unification. In Proceedings of the 1988 ACM Conference on Lisp and Functional Programming, pp. 153тАУ163
- Cardelli, Luca; Martini, Simone; Mitchell, John C.; Scedrov, Andre (1994). An extension of system F with subtyping. Information and Computation, vol. 9. North Holland, Amsterdam. pp. 4тАУ56
- Benjamin C. Pierce, and David N. Turner. (1997). Local type inference. Indiana University CSCI Technical Report #493, pp. 1-25
(1998) Local type inference. POPL '98 Proceedings of the 25th ACM SIGPLAN-SIGACT symposium on Principles of programming languages, pp. 252-265
(2000). Local type inference. ACM Transactions on Programming Languages and Systems (TOPLAS). Vol. 22(1), pp. 1-44
тАФ , Scala, 2001 .
1991 , 1994 тАФ , 1995 тАФ ┬лMatz┬╗, . , , . , , тАФ , , , , , ZeroMQ, RabbitMQ, Kafka. , , , , , . , ? . - , Crystal, , .
тАФ . , , .