Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования PythonΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 51

Автор Π ΠΎΠΌΠ°Π½ Π‘ΡƒΠ·ΠΈ

   self.c.itemconfigure(self.imgobj, image=self.img, anchor="nw")


app = App()

app.mainloop()

Π’ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π° информация, которая Π΄ΠΎ этого Π±Ρ‹Π»Π° глобальной со всСми ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΈΠ· этого ограничСниями. МоТно ΠΏΠΎΠΉΡ‚ΠΈ дальшС ΠΈ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ настройку мСню (Ссли ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ динамичСски ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ мСню, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹β€“ΠΌΠ΅Π½ΡŽ Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ сохранСны Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ).

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅:

На Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… систСмах Π½ΠΎΠ²Ρ‹Π΅ вСрсии Python ΠΏΠ»ΠΎΡ…ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ, Π² частности, с ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ для ΠΊΠΈΡ€ΠΈΠ»Π»ΠΈΡ†Ρ‹. Π­Ρ‚ΠΎ связано с ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠΌ Π½Π° Unicode Tcl/Tk. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ UTF–8 Π² строках, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°Ρ….

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

Π’ этой Π»Π΅ΠΊΡ†ΠΈΠΈ Π±Ρ‹Π»ΠΎ Π΄Π°Π½ΠΎ прСдставлСниС ΠΎ (Π½Π΅Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠΌ) ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ графичСского интСрфСйса для Python Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Tkinter. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° с графичСским интСрфСйсом β€” событийно–управляСмая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, проводящая врСмя Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ событий. Бобытия ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ графичСского интСрфСйса ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎ Ρ‚Π°ΠΉΠΌΠ΅Ρ€Ρƒ). ΠžΠ±Ρ‹Ρ‡Π½ΠΎ события Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ Π² Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π°Ρ… ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Π’ Tkinter событиС прСдставлСно ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΈΠ· Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠ²ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ указатСля (курсора ΠΌΡ‹ΡˆΠΈ), Π² ΠΊΠ°ΠΊΠΎΠΌ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ событиС ΠΈ Ρ‚.ΠΏ.

Π—Π΄Π΅ΡΡŒ Π±Ρ‹Π»ΠΈ рассмотрСны классы элСмСнтов интСрфСйса (Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹), ΠΈΡ… свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π’ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ большоС количСство свойств ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². НСкоторыС свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ достаточно ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ (ΠΈΡ… ΠΈΠΌΠ΅ΡŽΡ‚ всС ΠΈΠ»ΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ всС Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹), Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΆΠ΅ спСцифичны для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ класса Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ². ГрафичСский ΠΏΠ°ΠΊΠ΅Ρ‚ Python Imaging Library (PIL) прСдоставляСт класс ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° для располоТСния Π² видТСтС–рисункС растрового графичСского изобраТСния.

Π’ΠΈΠ΄ΠΆΠ΅Ρ‚Ρ‹ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°ΠΌΠΊΠΈ) Π² соотвСтствии с Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΏΡ€Π°Π²ΠΈΠ». Π­Ρ‚ΠΎΡ‚ Π½Π°Π±ΠΎΡ€ ΠΏΡ€Π°Π²ΠΈΠ» Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ располоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π² Tkinter Ρ‚Ρ€ΠΈ: pack, grid ΠΈ place.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ с графичСским интСрфСйсом ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π½Π° Π±Π°Π·Π΅ ΠΎΠΊΠ½Π° Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ уровня, простым наслСдованиСм. Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ позволяСт ΠΈΠ½ΠΊΠ°ΠΏΡΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ Π΄Π΅Π»Π°Ρ‚ΡŒ глобальной.

НуТно ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ для построСния интСрфСйса ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ чистый Tkinter. НапримСр, Π² Python доступны ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ScrolledText ΠΈ Tix, ΠΏΠΎΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠ΅ Π½Π°Π±ΠΎΡ€ Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ². ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ для ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… Π²ΠΈΠ΄ΠΆΠ΅Ρ‚ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для отобраТСния Π΄Π΅Ρ€Π΅Π²Π°).

ΠŸΠΎΡΡ‚Ρ€ΠΎΠ΅Π½ΠΈΠ΅ графичСского интСрфСйса Π½Π΅Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ способами β€” Π½Π΅ такая слоТная Π·Π°Π΄Π°Ρ‡Π°, Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Tkinter. Π­Ρ‚ΠΎΡ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ поставку Python ΠΈ ΠΏΠΎΡ‚ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΡ‡Ρ‚ΠΈ Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ установлСн Python.

Бсылки

Бписок Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ссылок Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ графичСскиС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ адрСсу:

http://phaseit.net/claird/comp.lang.python/python_GUI.html

ЛСкция #13: Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Python с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ языками программирования.

Π’ этой Π»Π΅ΠΊΡ†ΠΈΠΈ рассматриваСтся встраиваниС (embedding) ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° C, ΠΈ, Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚, написаниС ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ для Python Π½Π° языкС C (extending). ΠšΡ€Π°Ρ‚ΠΊΠΎ описываСтся инструмСнт для связывания C–библиотСк с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ Π½Π° Python (SWIG). ДаСтся ΠΎΠ±Π·ΠΎΡ€ связок языка Python с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ языками программирования: C++, Java, OCaml, Prolog. ΠšΠΎΡ€ΠΎΡ‚ΠΊΠΎ говорится ΠΎ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΌ языкС для написания ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Python β€” Pyrex.

C API

ДоступныС ΠΈΠ· языка Python ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΡŽΡ‚ΡΡ Π·Π° счСт ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ (extension modules). ΠœΠΎΠ΄ΡƒΠ»ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° языкС C ΠΈΠ»ΠΈ C++ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π° Python. Π’ этой Π»Π΅ΠΊΡ†ΠΈΠΈ Ρ€Π΅Ρ‡ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Python, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ CPython(Jython, рСализация Python Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ΅ Java Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ).

Π‘Π°ΠΌΠ° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ использования языка C ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ, Ссли Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, Π±ΡƒΠ΄ΡƒΡ‡ΠΈ Π·Π°ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ Π½Π° Python, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ. НапримСр, Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с массивами модуля Numeric (ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Π»Π΅ΠΊΡ†ΠΈΠΉ) написаны Π½Π° языкС C. ΠœΠΎΠ΄ΡƒΠ»ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ компилятором C/C++ ΠΊΠΎΠ΄Π° c удобством ΠΈ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒΡŽ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python. НСобходимыС свСдСния для создания ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ для Python Π΄Π°Π½Ρ‹ Π² ΠΈΡΡ‡Π΅Ρ€ΠΏΡ‹Π²Π°ΡŽΡ‰Π΅ΠΌ объСмС Π² стандартной Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π΅ Β«Python/C API Reference ManualΒ» (справочноС руководство ΠΏΠΎ Β«Python/C APIΒ»). Π—Π΄Π΅ΡΡŒ Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны лишь основныС ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ построСния модуля Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ, Π±Π΅Π· Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… подробностСй ΠΎΠ± API. Π‘Ρ‚ΠΎΠΈΡ‚ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ возмоТности Python Ρ€Π°Π²Π½ΠΎ доступны ΠΈ Π² C++, просто ΠΎΠ½ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½Ρ‹ Π² C–дСкларациях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² C++.

ВсС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для модуля Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ опрСдСлСния находятся Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ Python.h, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄ΠΎΠ»ΠΆΠ΅Π½ находится гдС–то Π½Π° ΠΏΡƒΡ‚ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² компилятора C/C++. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ вСрсиями Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π±Ρ‹Π» ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½ Python. Π–Π΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΌΠ°Ρ€ΠΊΠΎΠΉ компилятора C/C++.

Бвязь с ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ Python ΠΈΠ· ΠΊΠΎΠ΄Π° Π½Π° C осущСствляСтся ΠΏΡƒΡ‚Π΅ΠΌ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π΅ Python. ВсС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ Π½Π° Py ΠΈΠ»ΠΈ _Py, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Π²ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² Π² модулях Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Π½Π΅ слСдуСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ с ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ.

Π§Π΅Ρ€Π΅Π· C API доступны всС встроСнныС возмоТности языка Python (ΠΏΡ€ΠΈ нСобходимости, Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Π΅Π΅ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒ этот вопрос ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ):

β€’ Π²Ρ‹ΡΠΎΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΉ интСрфСйс ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ макросы Py_Main(), PyRun_String(), PyRun_File(), Py_CompileString(), PyCompilerFlags() ΠΈ Ρ‚.ΠΏ.),

β€’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ со встроСнным ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ (Py_Initialize(), Py_Finalize(), Py_NewInterpreter(), Py_EndInterpreter(), Py_SetProgramName() ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅),

β€’ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ подсчСтом ссылок (макросы Py_INCREF(), Py_DECREF(), Py_XINCREF(), Py_XDECREF(), Py_CLEAR()). ВрСбуСтся ΠΏΡ€ΠΈ создании ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ Pythonβ€“ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² C/C++-ΠΊΠΎΠ΄Π΅.

β€’ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ (PyErr*-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ PyExc_*-константы, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, PyErr_NoMemory() ΠΈ PyExc_IOError)

β€’ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ процСссом ΠΈ сСрвисы ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы (Py_FatalError(), Py_Exit(), Py_AtExit(), PyOS_CheckStack(), ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ/макросы PyOS*),

β€’ ΠΈΠΌΠΏΠΎΡ€Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ (PyImport_Import() ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅),

β€’ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° сСриализации ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² (PyMarshal_WriteObjectToFile(), PyMarshal_ReadObjectFromFile() ΠΈ Ρ‚.ΠΏ.)

β€’ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π°Π½Π°Π»ΠΈΠ·Π° строки Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² (PyArg_ParseTuple(), PyArg_VaParse(), PyArg_ParseTupleAndKeywords(), PyArg_VaParseTupleAndKeywords(), PyArg_UnpackTuple() ΠΈ Py_BuildValue()). Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ облСгчаСтся Π·Π°Π΄Π°Ρ‡Π° получСния Π² ΠΊΠΎΠ΄Π΅ Π½Π° C ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Π·Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠ· Python. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ PyArg_Parse* ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° строку Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²,

β€’ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² абстрактных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²: + ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° (PyObject_Print(), PyObject_HasAttrString(), PyObject_GetAttrString(), PyObject_HasAttr(), PyObject_GetAttr(), PyObject_RichCompare(), …, PyObject_IsInstance(), PyCallable_Check(), PyObject_Call(), PyObject_Dir() ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅). Π’ΠΎ, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡƒΠΌΠ΅Ρ‚ΡŒ Π΄Π΅Π»Π°Ρ‚ΡŒ любой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Python + ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» числа (PyNumber_Check(), PyNumber_Add(), …, PyNumber_And(), …, PyNumber_InPlaceAdd(), …, PyNumber_Coerce(), PyNumber_Int(), …). Π’ΠΎ, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄Π΅Π»Π°Ρ‚ΡŒ любой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ число + ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ (PySequence_Check(), PySequence_Size(), PySequence_Concat(), PySequence_Repeat(), PySequence_InPlaceConcat(), …, PySequence_GetItem(), …, PySequence_GetSlice(), PySequence_Tuple(), PySequence_Count(), …) + ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» отобраТСния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ являСтся ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ) (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: PyMapping_Check(), PyMapping_Length(), PyMapping_HasKey(), PyMapping_Keys(), …, PyMapping_SetItemString(), PyMapping_GetItemString() ΠΈ Π΄Ρ€.) + ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π° (PyIter_Check(), PyIter_Next()) + ΠŸΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Π±ΡƒΡ„Π΅Ρ€Π° (PyObject_AsCharBuffer(), PyObject_AsReadBuffer(), PyObject_AsWriteBuffer(), PyObject_CheckReadBuffer())

β€’ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° встроСнных Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. Аналогично описанному Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡƒΠ½ΠΊΡ‚Π΅, Π½ΠΎ ΡƒΠΆΠ΅ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… встроСнных Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. НапримСр: + БулСвский ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ (PyBool_Check() β€” ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° принадлСТности Ρ‚ΠΈΠΏΡƒ PyBool_Type, Py_False β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ False, Py_True β€” ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ True,

β€’ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΊΡƒΡ‡Π΅ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python) (Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ PyMem_Malloc(), PyMem_Realloc(), PyMem_Free(), PyMem_New(), PyMem_Resize(), PyMem_Del()). РазумССтся, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈ срСдства выдСлСния памяти C/C++, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π² этом случаС Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ прСимущСства управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python (сборка мусора ΠΈ Ρ‚.ΠΏ.). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, освобоТдСниС памяти Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΌ ΠΆΠ΅ способом, Ρ‡Ρ‚ΠΎ ΠΈ Π΅Π΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅. Π•Ρ‰Π΅ Ρ€Π°Π· стоит Π½Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ освобоТдСниС ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ области памяти (Π° Ρ€Π°Π²Π½ΠΎ использованиС области памяти послС Π΅Π΅ освобоТдСния) Ρ‡Ρ€Π΅Π²Π°Ρ‚ΠΎ ΡΠ΅Ρ€ΡŒΠ΅Π·Π½Ρ‹ΠΌΠΈ ошибками, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ компилятор C Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ возмоТности Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Ρ‚ΡŒ.

β€’ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ для опрСдСлСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² встроСнных Ρ‚ΠΈΠΏΠΎΠ² (PyObject, PyVarObject ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Ρ€ΡƒΠ³ΠΈΡ…)

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅

Под ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠΌ здСсь понимаСтся Π½Π°Π±ΠΎΡ€ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ класс для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ со своими экзСмплярами. Π­Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ доступны Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· Python (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, len(a) Π΄Π°Π΅Ρ‚ Π΄Π»ΠΈΠ½Ρƒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ), Π½ΠΎ ΠΈ ΠΈΠ· ΠΊΠΎΠ΄Π° Π½Π° C (PySequence_Length()).