Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Git commit | Atlassian Git Tutorial

Команда git commit Π΄Π΅Π»Π°Π΅Ρ‚ для ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° снимок Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ состояния ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… Π² Ρ€Π°Π·Π΄Π΅Π» проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ². Π’Π°ΠΊΠΈΠ΅ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½Π½Ρ‹Π΅ снимки состояния ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ «бСзопасныС» вСрсии ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° β€” Git Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡ… ΠΌΠ΅Π½ΡΡ‚ΡŒ, ΠΏΠΎΠΊΠ° Π²Ρ‹ явным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½Π΅ попроситС ΠΎΠ± этом. ΠŸΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git commit Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git add, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ (Β«ΠΏΡ€ΠΎΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΒ») измСнСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ сохранСны Π² ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅. Π­Ρ‚ΠΈ Π΄Π²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, git commit ΠΈ git add, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‡Π°Ρ‰Π΅ всСго.

ΠšΠΎΠΌΠΌΠΈΡ‚ Π² Git ΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π² SVN

НСсмотря Π½Π° ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅, ΠΊΠΎΠΌΠ°Π½Π΄Π° git commit Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΎΠ±Ρ‰Π΅Π³ΠΎ с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ svn commit. Π­Ρ‚ΠΎΡ‚ ΠΎΠ±Ρ‰Π΅ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡƒΡ‚Π°Ρ‚ΡŒ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ² Π² Git, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… ΠΎΠΏΡ‹Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с SVN, поэтому Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚ΡŒ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ. Π Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ git commit ΠΈ svn commit β€” это Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ модСлью Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ прилоТСния (SVN) ΠΈ модСлью распрСдСлСнного прилоТСния (Git).

Π’ SVN ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° измСнСния ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΈΠ· локального ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° SVN Π² ΠΎΠ±Ρ‰ΠΈΠΉ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ SVN. Π’ Git Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ распрСдСлСны, ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ снимков состояния Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, ΠΈ для этого ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ рСпозиториями Git. ПозТС ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Git ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² любой ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ.

ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ дСйствий

НС вдаваясь Π² подробности, Git ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ управлСния Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ шкалой. ΠšΠΎΠΌΠΌΠΈΡ‚Ρ‹ β€” основныС конструктивныС элСмСнты Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡˆΠΊΠ°Π»Ρ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Git. Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ снимки состояния ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π° Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ шкалС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Git. ΠšΠΎΠΌΠΌΠΈΡ‚Ρ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹

git commit, которая Π΄Π΅Π»Π°Π΅Ρ‚ снимок состояния ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. ΠšΠΎΠΌΠΌΠΈΡ‚Ρ‹ снимков состояния Git всСгда Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. Π’ этом ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ SVN, Π³Π΄Π΅ ΠΊΠΎΠΌΠΌΠΈΡ‚ Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ ΠΊΠΎΠΏΠΈΠΈ выполняСтся Π² Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ. Git ΠΆΠ΅, Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ², Π½Π΅ ΠΏΡ€ΠΈΠ½ΡƒΠΆΠ΄Π°Π΅Ρ‚ вас Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π²Ρ‹ Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΊ этому Π³ΠΎΡ‚ΠΎΠ²Ρ‹. Как Ρ€Π°Π·Π΄Π΅Π» проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ² являСтся Π±ΡƒΡ„Π΅Ρ€ΠΎΠΌ ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ ΠΈ историСй ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°, Ρ‚Π°ΠΊ ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° являСтся Π±ΡƒΡ„Π΅Ρ€ΠΎΠΌ ΠΌΠ΅ΠΆΠ΄Ρƒ Π΅Π³ΠΎ Π²ΠΊΠ»Π°Π΄ΠΎΠΌ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠ΅ΠΌ.

Π­Ρ‚ΠΎ мСняСт Π±Π°Π·ΠΎΠ²ΡƒΡŽ модСль Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Git. ВмСсто Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Π½ΠΎΡΠΈΡ‚ΡŒ измСнСния ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ нСпосрСдствСнно Π² Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Git ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°ΠΊΠ°ΠΏΠ»ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π² своСм локальном Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΈΠΌΠ΅Π΅Ρ‚ мноТСство прСимущСств ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с совмСстной Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ Π² стилС SVN: ΠΎΠ½ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° ΠΌΠ΅Π»ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹, объСдинСниС связанных ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² ΠΈ очистку локальной истории ΠΏΠ΅Ρ€Π΅Π΄ Π΅Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠ΅ΠΉ Π² Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎΠΌ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ. Он Ρ‚Π°ΠΊΠΆΠ΅ позволяСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ срСдС, откладывая ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° ΠΈΡ… Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΊ слиянию с Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°ΠΌΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. Но хотя изоляция ΠΈ отлоТСнная интСграция ΡƒΠ΄ΠΎΠ±Π½Ρ‹ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°, ΠΏΡ€ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ часто ΠΈ малСнькими Π±Π»ΠΎΠΊΠ°ΠΌΠΈ.

Для получСния Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΉ ΠΏΠΎ совмСстной Ρ€Π°Π±ΠΎΡ‚Π΅ Π² Git Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅, ΠΊΠ°ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ΠΈΡ€ΡƒΡŽΡ‚ свой Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ процСсс Π² Git.

Π‘Π½ΠΈΠΌΠΊΠΈ состояния, Π° Π½Π΅ различия

Помимо Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ SVN ΠΈ Git с практичСской Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния, ΠΈΡ… базовая рСализация Ρ‚Π°ΠΊΠΆΠ΅ основываСтся Π½Π° ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎ Ρ€Π°Π·Π½Ρ‹Ρ… концСпциях проСктирования. SVN отслСТиваСт различия Π² Ρ„Π°ΠΉΠ»Π΅, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ модСль управлСния вСрсиями Git базируСтся Π½Π° снимках состояния. НапримСр, Π² ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅ SVN содСрТатся различия исходного Ρ„Π°ΠΉΠ»Π° ΠΈ Ρ„Π°ΠΉΠ»Π°, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. А Git записываСт Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅ всС содСрТимоС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°.

Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² Git Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ быстрСС, Ρ‡Π΅ΠΌ Π² SVN, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Ρ„Π°ΠΉΠ»Π° Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Β«ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒΒ» ΠΈΠ· Π΅Π³ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ β€” Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Git находится ΡƒΠΆΠ΅ готовая рСдакция ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°.

МодСль снимков состояния Git влияСт практичСски Π½Π° всС аспСкты ΠΌΠΎΠ΄Π΅Π»ΠΈ управлСния вСрсиями, ΠΎΡ‚ инструмСнтов вСтвлСния ΠΈ слияния Π΄ΠΎ Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… процСссов ΠΏΡ€ΠΈ совмСстной Ρ€Π°Π±ΠΎΡ‚Π΅.

РаспространСнныС ΠΎΠΏΡ†ΠΈΠΈ

gitΒ commit

ΠšΠΎΠΌΠΌΠΈΡ‚ проиндСксированного состояния ΠΊΠΎΠ΄Π°. Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ с ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ввСсти ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ. ПослС Π²Π²ΠΎΠ΄Π° коммСнтария сохранитС Ρ„Π°ΠΉΠ» ΠΈ Π·Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚.

gitΒ commitΒ -a

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° состояния со всСми измСнСниями Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ измСнСния отслСТиваСмых Ρ„Π°ΠΉΠ»ΠΎΠ² (Ρ‚Π΅Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git add).

gitΒ commitΒ -mΒ "commitΒ message"

Быстрая ΠΊΠΎΠΌΠ°Π½Π΄Π°, которая создаСт ΠΊΠΎΠΌΠΌΠΈΡ‚ с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅ΠΌ. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Π° git commit ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ локально настроСнный тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ с ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ввСсти ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°

-m тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ Π½Π΅ открываСтся, Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ подставлСнный ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ.

gitΒ commitΒ -amΒ "commitΒ message"

Команда для ΠΎΠΏΡ‹Ρ‚Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ -a ΠΈ -m. Π­Ρ‚Π° комбинация ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² создаСт ΠΊΠΎΠΌΠΌΠΈΡ‚ всСх проиндСксированных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ добавляСт ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ подставлСнный ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ.

gitΒ commitΒ --amend

Π­Ρ‚ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ добавляСт ΠΊΠΎΠΌΠ°Π½Π΄Π΅ commit Π½ΠΎΠ²Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ этого ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ послСдний ΠΊΠΎΠΌΠΌΠΈΡ‚. ВмСсто создания Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° проиндСксированныС измСнСния Π±ΡƒΠ΄ΡƒΡ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, эта ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ настроСнный тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ систСмы с ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Ρ€Π°Π½Π΅Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ commit

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ прСдполагаСтся, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»ΠΈ содСрТимоС Ρ„Π°ΠΉΠ»Π° hello.py Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π²Π΅Ρ‚ΠΊΠ΅ ΠΈ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚ Π² ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git add, послС Ρ‡Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚ проиндСксированного снимка состояния.

gitΒ addΒ hello.py

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ Ρ„Π°ΠΉΠ» hello.py

Π² Ρ€Π°Π·Π΄Π΅Π» проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ² Git. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ git status.

gitΒ status
OnΒ branchΒ main
ChangesΒ toΒ beΒ committed:
Β Β (useΒ "gitΒ resetΒ HEADΒ <file>..."Β toΒ unstage)
Β Β Β newΒ file:Β hello.py

ΠžΠΊΡ€Π°ΡˆΠ΅Π½Π½Ρ‹ΠΉ Π·Π΅Π»Π΅Π½Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ Π²Ρ‹Π²ΠΎΠ΄ Β«new file: hello.pyΒ» сообщаСт ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» hello.py Π±ΡƒΠ΄Π΅Ρ‚ сохранСн ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. ΠšΠΎΠΌΠΌΠΈΡ‚ выполняСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹.

gitΒ commit

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΎΡ‚ΠΊΡ€ΠΎΠ΅Ρ‚ тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ (настраиваСмый Ρ‡Π΅Ρ€Π΅Π· git config) для Π²Π²ΠΎΠ΄Π° коммСнтария ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅Ρ‚ список Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ зафиксированы Π² этом ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅:

#Β PleaseΒ enterΒ theΒ commitΒ messageΒ forΒ yourΒ changes.Β LinesΒ starting
#Β withΒ '#'Β willΒ beΒ ignored,Β andΒ anΒ emptyΒ messageΒ abortsΒ theΒ commit.
#Β OnΒ branchΒ main
#Β ChangesΒ toΒ beΒ committed:
#Β (useΒ "gitΒ resetΒ HEADΒ ..."Β toΒ unstage)
#
#modified:Β hello.py

ΠžΡΠΎΠ±Ρ‹Ρ… Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ для ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π² ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ Π² Git Π½Π΅Ρ‚, Π½ΠΎ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ пСрвая строка содСрТит описания ΠΊΠΎΠΌΠΌΠΈΡ‚Π° Π΄Π»ΠΈΠ½ΠΎΠΉ Π΄ΠΎ 50 символов, Π·Π°Ρ‚Π΅ΠΌ слСдуСт пустая строка ΠΈ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ пояснСниС Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

ChangeΒ theΒ messageΒ displayedΒ byΒ hello.py

-Β UpdateΒ theΒ sayHello()Β functionΒ toΒ outputΒ theΒ user'sΒ name
-Β ChangeΒ theΒ sayGoodbye()Β functionΒ toΒ aΒ friendlierΒ message

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ пСрвая строка коммСнтария ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Π° Ρ‚Π΅ΠΌΠ΅ элСктронного письма. ΠžΡΡ‚Π°Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ коммСнтария считаСтся Ρ‚Π΅Π»ΠΎΠΌ сообщСния ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ описания Π½Π°Π±ΠΎΡ€Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² ΠΊΠΎΠΌΠΌΠΈΡ‚Π΅. МногиС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² коммСнтариях настоящСС врСмя. Π’Π°ΠΊ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ становится большС ΠΏΠΎΡ…ΠΎΠΆ Π½Π° список дСйствий Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, благодаря Ρ‡Π΅ΠΌΡƒ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ пСрСзаписи истории становятся Π±ΠΎΠ»Π΅Π΅ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятными.

ОбновлСниС ΠΊΠΎΠΌΠΌΠΈΡ‚Π° (ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ amend)

ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρƒ с Ρ„Π°ΠΉΠ»ΠΎΠΌ

hello.py ΠΈΠ· ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°. Π”Π°Π²Π°ΠΉΡ‚Π΅ внСсСм Π² Ρ„Π°ΠΉΠ» hello.py Π½ΠΎΠ²Ρ‹Π΅ измСнСния ΠΈ запустим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

gitΒ addΒ hello.py
gitΒ commitΒ --amend

Π‘Π½ΠΎΠ²Π° откроСтся настроСнный тСкстовый Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€. Но Π½Π° этот Ρ€Π°Π· ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ ΠΊ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ ΡƒΠΆΠ΅ Π²Π²ΠΎΠ΄ΠΈΠ»ΠΈ Ρ€Π°Π½Π΅Π΅. Π­Ρ‚ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ создаСм Π½ΠΎΠ²Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠΈΡ‚, Π° Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ послСдний.

РСзюмС

Команда git commit являСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· основных ΠΈ пСрвостСпСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Git. Π‘Π½Π°Ρ‡Π°Π»Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° git add для Π²Ρ‹Π±ΠΎΡ€Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ проиндСксированы для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°. Π—Π°Ρ‚Π΅ΠΌ запускаСтся ΠΊΠΎΠΌΠ°Π½Π΄Π°

git commit, которая создаСт снимок проиндСксированных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π½Π° Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ шкалС истории ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Git. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± использовании ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ git add см. Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ страницС. Для изучСния состояния Ρ€Π°Π·Π΄Π΅Π»Π° проиндСксированных Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‰Π΅Π³ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ git status.

МодСли ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠ² Π² SVN ΠΈ Π² Git сущСствСнно ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ, Π½ΠΎ ΠΈΠ·-Π·Π° ΠΎΠ±Ρ‰Π΅ΠΉ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠ»ΠΎΠ³ΠΈΠΈ часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Π°. Если Π²Ρ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π² Git, имСя ΠΎΠΏΡ‹Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с SVN, Π²Π°ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π² Git β€” простая опСрация, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ слСдуСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ часто. Π’ SVN ΠΊΠΎΠΌΠΌΠΈΡ‚ β€” слоТная опСрация, связанная с Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ запроса, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π² Git ΠΊΠΎΠΌΠΌΠΈΡ‚Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ локально ΠΈ ΠΏΠΎ Π±ΠΎΠ»Π΅Π΅ эффСктивному Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ. Π£Ρ€ΠΎΠΊ 11 курса «Python. Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅»

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

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ с нСбольшими ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΊΠ°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сами ΠΏΠΎ сСбС, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎ, Π½Π΅ ΠΈΡΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ, Π° Π²ΡΡ‚Ρ€Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. НСрСдко ΠΈΡ… Ρ‚Π°ΠΊ ΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ – ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π”Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π΅Ρ‚. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈ нСобходимости ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅. Волько ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ½ΠΈ ΠΈΡ… ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π½Π΅ с Π²Π²ΠΎΠ΄Π° (ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹, Ρ„Π°ΠΉΠ»Π° ΠΈ Π΄Ρ€.), Π° ΠΈΠ· Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Бюда ΠΆΠ΅ ΠΎΠ½ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ своСй Ρ€Π°Π±ΠΎΡ‚Ρ‹.

БущСствуСт мноТСство встроСнных Π² язык программирования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π‘ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Ρ‚Π°ΠΊΠΈΠΌΠΈ Π² Python ΠΌΡ‹ ΡƒΠΆΠ΅ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡŒ. Π­Ρ‚ΠΎ print(), input(), int(), float(), str(), type(). Код ΠΈΡ… Ρ‚Π΅Π»Π° Π½Π°ΠΌ Π½Π΅ Π²ΠΈΠ΄Π΅Π½, ΠΎΠ½ Π³Π΄Π΅-Ρ‚ΠΎ «ΡΠΏΡ€ΡΡ‚Π°Π½ Π²Π½ΡƒΡ‚Ρ€ΠΈ языка». Нам ΠΆΠ΅ прСдоставляСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ интСрфСйс – имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, программист всСгда ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ свои Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π˜Ρ… Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌΠΈ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΏΠΎΠ΄ «ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ» ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ программиста, Π° Π½Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΡ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. РазбСрСмся, Π·Π°Ρ‡Π΅ΠΌ Π½Π°ΠΌ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈ ΠΊΠ°ΠΊ ΠΈΡ… ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π½Π°Π΄ΠΎ Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π° подряд Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ Π½Π° Π²Π²ΠΎΠ΄ ΠΏΠ°Ρ€Ρƒ чисСл ΠΈ ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ…. Π‘ этой Ρ†Π΅Π»ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ»:

i = 0
while i < 3:
    a = int(input())
    b = int(input())
    print(a+b)
    i += 1

Однако, Ρ‡Ρ‚ΠΎ Ссли ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ запросом чисСл, Π½Π°Π΄ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ надпись, Π·Π°Ρ‡Π΅ΠΌ ΠΎΠ½ΠΈ Π½ΡƒΠΆΠ½Ρ‹, ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· эта надпись разная. ΠœΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€Π΅Ρ€Π²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ», Π° Π·Π°Ρ‚Π΅ΠΌ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ Ρ†ΠΈΠΊΠ»Ρƒ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ. ΠŸΡ€ΠΈΠ΄Π΅Ρ‚ΡΡ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Π½Π΅Π³ΠΎ, ΠΈ Ρ‚ΠΎΠ³Π΄Π° получится Π΄Π»ΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄, содСрТащий Π² Ρ€Π°Π·Π½Ρ‹Ρ… мСстах ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ участки:

print("Бколько бананов и ананасов для обСзьян?")
a = int(input())
b = int(input())
print("ВсСго", a+b, "ΡˆΡ‚. ")
Β 
print("Бколько ΠΆΡƒΠΊΠΎΠ² ΠΈ Ρ‡Π΅Ρ€Π²Π΅ΠΉ для Π΅ΠΆΠ΅ΠΉ?")
a = int(input())
b = int(input())
print("ВсСго", a+b, "ΡˆΡ‚.")
Β 
print("Бколько Ρ€Ρ‹Π± ΠΈ моллюсков для Π²Ρ‹Π΄Ρ€?")
a = int(input())
b = int(input())
print("ВсСго", a+b, "ΡˆΡ‚.")

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ исполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Бколько бананов и ананасов для обСзьян?
15
5
ВсСго 20 ΡˆΡ‚.
Бколько ΠΆΡƒΠΊΠΎΠ² ΠΈ Ρ‡Π΅Ρ€Π²Π΅ΠΉ для Π΅ΠΆΠ΅ΠΉ?
50
12
ВсСго 62 ΡˆΡ‚.
Бколько Ρ€Ρ‹Π± ΠΈ моллюсков для Π²Ρ‹Π΄Ρ€?
16
8
ВсСго 24 ΡˆΡ‚.

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

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ def

Π’ языкС программирования Python Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° def. Рассмотрим ΠΊΠΎΠ΄:

def count_food():
    a = int(input())
    b = int(input())
    print("ВсСго", a+b, "ΡˆΡ‚.")

Π­Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Как ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ слоТныС инструкции Π²Ρ€ΠΎΠ΄Π΅ условного ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΈ Ρ†ΠΈΠΊΠ»ΠΎΠ² функция состоит ΠΈΠ· Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈ Ρ‚Π΅Π»Π°. Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ оканчиваСтся Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠ΅ΠΌ ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΎΠΌ Π½Π° Π½ΠΎΠ²ΡƒΡŽ строку. Π’Π΅Π»ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ отступ.

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово def сообщаСт ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρƒ, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π—Π° def слСдуСт имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Оно ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌ, Ρ‚Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ всякий ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, пСрСмСнная. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ вСсьма ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄Π°Π²Π°Ρ‚ΡŒ всСму осмыслСнныС ΠΈΠΌΠ΅Π½Π°. Π’Π°ΠΊ Π² Π΄Π°Π½Π½ΠΎΠΌ случаС функция Π½Π°Π·Π²Π°Π½Π° «ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ_Π΅Π΄Ρƒ» Π² ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π΅ Π½Π° русский.

ПослС ΠΈΠΌΠ΅Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ставятся скобки. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠ½ΠΈ пустыС. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ функция Π½Π΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ Π΅Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Однако ΠΎΠ½Π° ΠΌΠΎΠ³Π»Π° Π±Ρ‹ ΠΈΡ… ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, ΠΈ Ρ‚ΠΎΠ³Π΄Π° Π² скобках Π±Ρ‹Π»ΠΈ Π±Ρ‹ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹.

ПослС двоСточия слСдуСт Ρ‚Π΅Π»ΠΎ, содСрТащСС инструкции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π΅Π΅ Π²Ρ‹Π·ΠΎΠ². Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΎΠ½ΠΈ Π½Π΅ рядом ΠΈ Π½Π΅ вмСстС. МоТно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π½ΠΎ Π½ΠΈ Ρ€Π°Π·Ρƒ Π΅Π΅ Π½Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ. НСльзя Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, которая Π½Π΅ Π±Ρ‹Π»Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Π½ΠΎ Π½ΠΈ Ρ€Π°Π·Ρƒ Π½Π΅ Π²Ρ‹Π·Π²Π°Π² Π΅Π΅, Π²Ρ‹ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ Π΅Π΅ Ρ‚Π΅Π»Π°.

Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Рассмотрим ΠΏΠΎΠ»Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ:

def count_food():
    a = int(input())
    b = int(input())
    print("ВсСго", a+b, "ΡˆΡ‚.")
Β 
print("Бколько бананов и ананасов для обСзьян?")
count_food()
Β 
print("Бколько ΠΆΡƒΠΊΠΎΠ² ΠΈ Ρ‡Π΅Ρ€Π²Π΅ΠΉ для Π΅ΠΆΠ΅ΠΉ?")
count_food()
Β 
print("Бколько Ρ€Ρ‹Π± ΠΈ моллюсков для Π²Ρ‹Π΄Ρ€?")
count_food()

ПослС Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° экран ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ сообщСния осущСствляСтся Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выглядит просто ΠΊΠ°ΠΊ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π½ΠΈΠ΅ Π΅Π΅ ΠΈΠΌΠ΅Π½ΠΈ со скобками. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΌΡ‹ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ скобки ΠΎΠΏΡΡ‚ΡŒ ΠΆΠ΅ пустыС. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΊΠΎΠ΄Π΅ функция вызываСтся Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π°.

Когда функция вызываСтся, ΠΏΠΎΡ‚ΠΎΠΊ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΊ Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π΅Π΅ Ρ‚Π΅Π»ΠΎ. ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Ρ‚Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ исполнСно, ΠΏΠΎΡ‚ΠΎΠΊ выполнСния возвращаСтся Π² основной ΠΊΠΎΠ΄ Π² Ρ‚ΠΎ мСсто, Π³Π΄Π΅ функция Π²Ρ‹Π·Ρ‹Π²Π°Π»Π°ΡΡŒ. Π”Π°Π»Π΅Π΅ исполняСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π·Π° Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

Π’ языкС Python ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ Π²Ρ‹Π·ΠΎΠ²Π°ΠΌ. Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΊΠΎΠ΄ строка Π·Π° строкой ΠΈ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ находится Π½ΠΈΠΆΠ΅ ΠΏΠΎ Ρ‚Π΅Ρ‡Π΅Π½ΠΈΡŽ, Π΅ΠΌΡƒ Π΅Ρ‰Π΅ нСизвСстно. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Ссли Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΠ΅Ρ‚ Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ, Ρ‚ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ ошибка (выбрасываСтся ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ NameError):

print("Бколько бананов и ананасов для обСзьян?")
count_food()
Β 
print("Бколько ΠΆΡƒΠΊΠΎΠ² ΠΈ Ρ‡Π΅Ρ€Π²Π΅ΠΉ для Π΅ΠΆΠ΅ΠΉ?")
count_food()
Β 
print("Бколько Ρ€Ρ‹Π± ΠΈ моллюсков для Π²Ρ‹Π΄Ρ€?")
count_food()
Β 
def count_food():
    a = int(input())
    b = int(input())
    print("ВсСго", a+b, "ΡˆΡ‚.")

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Бколько бананов и ананасов для обСзьян?
Traceback (most recent call last):
  File "test.py", line 2, in <module>
    count_food()
NameError: name 'count_food' is not defined

Для ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… языков это Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ условиС. Π’Π°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… мСстах ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Однако для удобочитаСмости ΠΊΠΎΠ΄Π° программисты Π΄Π°ΠΆΠ΅ Π² этом случаС ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΡŽΡ‚ ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π°.

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈΠ΄Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ структуру

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

ΠŸΡƒΡΡ‚ΡŒ Π½Π°Π΄ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰ΡƒΡŽ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… Ρ„ΠΈΠ³ΡƒΡ€. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΊΠ°ΠΊΠΎΠΉ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹ ΠΎΠ½ Ρ…ΠΎΡ‡Π΅Ρ‚ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ. ПослС этого Π²Π²ΠΎΠ΄ΠΈΡ‚ исходныС Π΄Π°Π½Π½Ρ‹Π΅. НапримСр, Π΄Π»ΠΈΠ½Ρƒ ΠΈ ΡˆΠΈΡ€ΠΈΠ½Ρƒ Π² случаС ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°. Π§Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊ выполнСния Π½Π° нСсколько Π²Π΅Ρ‚Π²Π΅ΠΉ, слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ if-elif-else:

figure = input("1-ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, 
2-Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, 3-ΠΊΡ€ΡƒΠ³: ")
Β 
if figure == '1':
  a = float(input("Π¨ΠΈΡ€ΠΈΠ½Π°: "))
  b = float(input("Высота: "))
  print("ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ: %.2f" % (a*b))
elif figure == '2':
  a = float(input("ОснованиС: "))
  h = float(input("Высота: "))
  print("ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ: %.2f" % (0.5 * a * h))
elif figure == '3':
  r = float(input("Радиус: "))
  print("ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ: %. 2f" % (3.14 * r**2))
else:
  print("Ошибка ввода")

Π—Π΄Π΅ΡΡŒ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΈ всС прСкрасно. Но напишСм Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ с функциями:

def rectangle():
    a = float(input("Π¨ΠΈΡ€ΠΈΠ½Π°: "))
    b = float(input("Высота: "))
    print("ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ: %.2f" % (a*b))
Β 
def triangle():
    a = float(input("ОснованиС: "))
    h = float(input("Высота: "))
    print("ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ: %.2f" % (0.5 * a * h))
Β 
def circle():
    r = float(input("Радиус: "))
    print("ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ: %.2f" % (3.14 * r**2))
Β 
figure = input("1-ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, 
2-Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ, 3-ΠΊΡ€ΡƒΠ³: ")
if figure == '1':
  rectangle()
elif figure == '2':
  triangle()
elif figure == '3':
  circle()
else:
  print("Ошибка ввода")

Он каТСтся слоТнСС, Π° каТдая ΠΈΠ· Ρ‚Ρ€Π΅Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ вызываСтся всСго ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·. Однако ΠΈΠ· ΠΎΠ±Ρ‰Π΅ΠΉ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΊΠ°ΠΊ Π±Ρ‹ ΡƒΠ±Ρ€Π°Π½Ρ‹ ΠΈ обособлСны инструкции для нахоТдСния ΠΏΠ»ΠΎΡ‰Π°Π΄Π΅ΠΉ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ состоит ΠΈΠ· ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… «ΠΊΠΈΡ€ΠΏΠΈΡ‡ΠΈΠΊΠΎΠ² Π›Π΅Π³ΠΎ». Π’ основной Π²Π΅Ρ‚ΠΊΠ΅ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… ΠΊΠ°ΠΊ ΡƒΠ³ΠΎΠ΄Π½ΠΎ. Она ΠΈΠ³Ρ€Π°Π΅Ρ‚ Ρ€ΠΎΠ»ΡŒ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°.

Если Π½Π°ΠΌ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ захочСтся Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ Ρ‚Ρ€Π΅ΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅ Π“Π΅Ρ€ΠΎΠ½Π°, Π° Π½Π΅ Ρ‡Π΅Ρ€Π΅Π· высоту, Ρ‚ΠΎ Π½Π΅ придСтся ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π²ΠΎ всСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ (ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° состоит ΠΈΠ· тысяч строк ΠΊΠΎΠ΄Π° ΠΊΠ°ΠΊ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹). ΠœΡ‹ ΠΏΠΎΠΉΠ΄Π΅ΠΌ ΠΊ мСсту опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠΌ Ρ‚Π΅Π»ΠΎ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π½ΠΈΡ….

Если ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Ρ‚ΠΎ ΠΌΡ‹ смоТСм ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Ρ‚ΡƒΠ΄Π°, сославшись Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» с ΠΊΠΎΠ΄ΠΎΠΌ (ΠΊΠ°ΠΊ это дСлаСтся Π² Python, Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСно ΠΏΠΎΠ·ΠΆΠ΅).

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ Ρ€Π°Π±ΠΎΡ‚Π°

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ. Для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ этой возмоТности Π½Π°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ описанию.

Основная Π²Π΅Ρ‚ΠΊΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½Π΅ считая Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, состоит ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ строки ΠΊΠΎΠ΄Π°. Π­Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ test(). Π’ Π½Π΅ΠΉ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ Π½Π° Π²Π²ΠΎΠ΄ Ρ†Π΅Π»ΠΎΠ΅ число. Если ΠΎΠ½ΠΎ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅, Ρ‚ΠΎ вызываСтся функция positive(), Ρ‚Π΅Π»ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ содСрТит ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° экран слова «ΠŸΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅». Если число ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅, Ρ‚ΠΎ вызываСтся функция negative(), Π΅Π΅ Ρ‚Π΅Π»ΠΎ содСрТит Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ‹Π²ΠΎΠ΄Π° Π½Π° экран слова «ΠžΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅».

ΠŸΠΎΠ½ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ² test() Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ послС опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Однако ΠΈΠΌΠ΅Π΅Ρ‚ Π»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ порядок опрСдСлСния самих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ? Π’ΠΎ Π΅ΡΡ‚ΡŒ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π»ΠΈ опрСдСлСния positive() ΠΈ negative() ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ test() ΠΈΠ»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ послС Π½Π΅Π³ΠΎ? ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π²Π°ΡˆΡƒ Π³ΠΈΠΏΠΎΡ‚Π΅Π·Ρƒ, помСняв объявлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ мСстами. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΡƒΡ€ΠΎΠΊΠΈ Π² pdf-вСрсии ΠΈ android-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ курса


Π’Π΅Π»ΠΎ запроса

β€” FastAPI

Когда Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΡ‚ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° (скаТСм, Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°) Π² ваш API, Π²Ρ‹ отправляСтС ΠΈΡ… ΠΊΠ°ΠΊ Ρ‚Π΅Π»ΠΎ запроса .

Π’Π΅Π»ΠΎ запроса β€” это Π΄Π°Π½Π½Ρ‹Π΅, ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ Π² ваш API. Π’Π΅Π»ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Π° β€” это Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ваш API отправляСт ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ.

Π’Π°Ρˆ API ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Ρ‚Π΅Π»ΠΎ ΠΎΡ‚Π²Π΅Ρ‚Π° . Но ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ постоянно ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ запроса Ρ‚Π΅Π».

ΠžΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ request body, Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ Pydantic со всСй ΠΈΡ… ΠΌΠΎΡ‰ΡŒΡŽ ΠΈ прСимущСствами.

Π˜ΠΌΠΏΠΎΡ€Ρ‚ Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ

Pydantic

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ BaseModel ΠΈΠ· pydantic :

Python 3.6 ΠΈ Π²Ρ‹ΡˆΠ΅Python 3.10 ΠΈ Π²Ρ‹ΡˆΠ΅

 ΠΎΡ‚ Π²Π²ΠΎΠ΄Π° import Union
ΠΈΠ· fastapi ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ FastAPI
ΠΈΠ· pydantic ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ BaseModel
Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ класса (Базовая модСль):
    Π½Π°Π·Π²Π°Π½ΠΈΠ΅: ΡƒΠ».
    описаниС: Union[str, None] = None
    Ρ†Π΅Π½Π°: ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π°Ρ
    Π½Π°Π»ΠΎΠ³: Union[float, None] = None
ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ = FastAPI()
@app.post("/items/")
асинхронноС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ create_item (элСмСнт: элСмСнт):
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΈΠ·Π΄Π΅Π»ΠΈΠ΅
 
 ΠΈΠ· fastapi ΠΈΠΌΠΏΠΎΡ€Ρ‚ FastAPI
ΠΈΠ· pydantic ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ BaseModel
Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ класса (Базовая модСль):
    Π½Π°Π·Π²Π°Π½ΠΈΠ΅: ΡƒΠ».
    описаниС: ΡƒΠ» | НСт = НСт
    Ρ†Π΅Π½Π°: ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π°Ρ
    Π½Π°Π»ΠΎΠ³: ΠΏΠ»Π°Π²Π°ΡŽΡ‰ΠΈΠΉ | НСт = НСт
ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ = FastAPI()
@app. post("/items/")
асинхронноС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ create_item (элСмСнт: элСмСнт):
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΈΠ·Π΄Π΅Π»ΠΈΠ΅
 

Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ свою модСль Π΄Π°Π½Π½Ρ‹Ρ…

Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚Π΅ свою модСль Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠ°ΠΊ класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ наслСдуСтся ΠΎΡ‚ BaseModel .

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ стандартныС Ρ‚ΠΈΠΏΡ‹ Python для всСх Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ²:

Python 3.6 ΠΈ Π²Ρ‹ΡˆΠ΅ Python 3.10 ΠΈ Π²Ρ‹ΡˆΠ΅

 ΠΎΡ‚ Π²Π²ΠΎΠ΄Π° ΠΈΠΌΠΏΠΎΡ€Ρ‚Π½ΠΎΠ³ΠΎ союза
ΠΈΠ· fastapi ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ FastAPI
ΠΈΠ· pydantic ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ BaseModel
Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ класса (Базовая модСль):
    Π½Π°Π·Π²Π°Π½ΠΈΠ΅: ΡƒΠ».
    описаниС: Union[str, None] = None
    Ρ†Π΅Π½Π°: ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π°Ρ
    Π½Π°Π»ΠΎΠ³: Union[float, None] = None
ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ = FastAPI()
@app.post("/items/")
асинхронноС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ create_item (элСмСнт: элСмСнт):
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΈΠ·Π΄Π΅Π»ΠΈΠ΅
 
 ΠΈΠ· fastapi ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° FastAPI
ΠΈΠ· pydantic ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ BaseModel
Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ класса (Базовая модСль):
    Π½Π°Π·Π²Π°Π½ΠΈΠ΅: ΡƒΠ».
    описаниС: ΡƒΠ» | НСт = НСт
    Ρ†Π΅Π½Π°: ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π°Ρ
    Π½Π°Π»ΠΎΠ³: ΠΏΠ»Π°Π²Π°ΡŽΡ‰ΠΈΠΉ | НСт = НСт
ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ = FastAPI()
@app.post("/items/")
асинхронноС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ create_item (элСмСнт: элСмСнт):
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΈΠ·Π΄Π΅Π»ΠΈΠ΅
 

Π’Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€ΠΈ объявлСнии ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² запроса, ΠΊΠΎΠ³Π΄Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, это Π½Π΅ трСбуСтся. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС трСбуСтся. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ None , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ.

НапримСр, эта модСль Π²Ρ‹ΡˆΠ΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ JSON » object » (ΠΈΠ»ΠΈ Python dict ), Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

 {
    "имя": "Π€Ρƒ",
    "description": "ΠΠ΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ описаниС",
    Β«Ρ†Π΅Π½Π°Β»: 45,2,
    Β«Π½Π°Π»ΠΎΠ³Β»: 3,5
}
 

… ΠΊΠ°ΠΊ описаниС ΠΈ Π½Π°Π»ΠΎΠ³ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ (со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ НСт ), этот JSON Β« ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Β» Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ:

 {
    "имя": "Π€Ρƒ",
    Β«Ρ†Π΅Π½Π°Β»: 45,2
}
 

ΠžΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€

Π§Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΏΡƒΡ‚ΠΈ , ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚Π΅ Π΅Π³ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π²Ρ‹ объявили ΠΏΡƒΡ‚ΡŒ ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ запроса:

Python 3.6 ΠΈ Π²Ρ‹ΡˆΠ΅Python 3.10 ΠΈ Π²Ρ‹ΡˆΠ΅

 ΠΎΡ‚ Π²Π²ΠΎΠ΄Π° import Union
ΠΈΠ· fastapi ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ FastAPI
ΠΈΠ· pydantic ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ BaseModel
Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ класса (Базовая модСль):
    Π½Π°Π·Π²Π°Π½ΠΈΠ΅: ΡƒΠ».
    описаниС: Union[str, None] = None
    Ρ†Π΅Π½Π°: ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π°Ρ
    Π½Π°Π»ΠΎΠ³: Union[float, None] = None
ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ = FastAPI()
@app. post("/items/")
асинхронноС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ create_item (элСмСнт: элСмСнт):
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΈΠ·Π΄Π΅Π»ΠΈΠ΅
 
 ΠΈΠ· fastapi ΠΈΠΌΠΏΠΎΡ€Ρ‚ FastAPI
ΠΈΠ· pydantic ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ BaseModel
Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ класса (Базовая модСль):
    Π½Π°Π·Π²Π°Π½ΠΈΠ΅: ΡƒΠ».
    описаниС: ΡƒΠ» | НСт = НСт
    Ρ†Π΅Π½Π°: ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π°Ρ
    Π½Π°Π»ΠΎΠ³: ΠΏΠ»Π°Π²Π°ΡŽΡ‰ΠΈΠΉ | НСт = НСт
ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ = FastAPI()
@app.post("/items/")
асинхронноС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ create_item (элСмСнт: элСмСнт):
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΈΠ·Π΄Π΅Π»ΠΈΠ΅
 

… ΠΈ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚Π΅ Π΅Π³ΠΎ Ρ‚ΠΈΠΏ ΠΊΠ°ΠΊ модСль, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ создали, Item .

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹

Волько с этим объявлСниСм Ρ‚ΠΈΠΏΠ° Python FastAPI Π±ΡƒΠ΄Π΅Ρ‚:

  • ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ‚Π΅Π»ΠΎ запроса Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON.
  • ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² (ΠΏΡ€ΠΈ нСобходимости).
  • ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅.
    • Если Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹, ΠΎΠ½ Π²Π΅Ρ€Π½Π΅Ρ‚ ΠΊΡ€Π°ΡΠΈΠ²ΡƒΡŽ ΠΈ ΠΏΠΎΠ½ΡΡ‚Π½ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΡƒΠΊΠ°Π·Π°Π², Π³Π΄Π΅ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΌΠΈ.
  • Π’Ρ‹Π΄Π°Ρ‚ΡŒ Π²Π°ΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ ΠΏΡƒΠ½ΠΊΡ‚ .
    • ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Ρ‹ объявили Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚ΠΈΠΏ Item , Ρƒ вас Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ вся ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° (Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΈ Ρ‚. Π΄.) для всСх Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΠΈ ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ².
  • Π‘ΠΎΠ·Π΄Π°ΠΉΡ‚Π΅ опрСдСлСния схСмы JSON для своСй ΠΌΠΎΠ΄Π΅Π»ΠΈ, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π³Π΄Π΅ ΡƒΠ³ΠΎΠ΄Π½ΠΎ, Ссли это ΠΈΠΌΠ΅Π΅Ρ‚ смысл для вашСго ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.
  • Π­Ρ‚ΠΈ схСмы Π±ΡƒΠ΄ΡƒΡ‚ Ρ‡Π°ΡΡ‚ΡŒΡŽ сгСнСрированной схСмы OpenAPI ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ автоматичСским Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ UI .

АвтоматичСскиС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹

Π‘Ρ…Π΅ΠΌΡ‹ JSON Π²Π°ΡˆΠΈΡ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Π±ΡƒΠ΄ΡƒΡ‚ Ρ‡Π°ΡΡ‚ΡŒΡŽ схСмы, сгСнСрированной OpenAPI, ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ API:

И Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ… API Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΡƒΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Π½ΡƒΠΆΠ½Ρ‹:

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°

Π’ вашСм Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ вашСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ Π²Π΅Π·Π΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ подсказки Ρ‚ΠΈΠΏΠΎΠ² ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ (этого Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ссли Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ dict вмСсто ΠΌΠΎΠ΄Π΅Π»ΠΈ Pydantic):

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ошибок для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°:

Π­Ρ‚ΠΎ Π½Π΅ случайно, вСсь Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊ построСн Π²ΠΎΠΊΡ€ΡƒΠ³ этого Π΄ΠΈΠ·Π°ΠΉΠ½Π°.

И ΠΎΠ½ Π±Ρ‹Π» Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ протСстирован Π½Π° этапС проСктирования ΠΏΠ΅Ρ€Π΅Π΄ любой Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ со всСми Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ.

Для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ этого Π±Ρ‹Π»ΠΈ Π΄Π°ΠΆΠ΅ внСсСны Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ измСнСния Π² сам Pydantic.

ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ снимки экрана Π±Ρ‹Π»ΠΈ сдСланы с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Visual Studio Code.

Но Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Ρ‚Ρƒ ΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° с PyCharm ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎΠΌ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ² Python:

Π‘ΠΎΠ²Π΅Ρ‚

Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ PyCharm Π² качСствС Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Pydantic PyCharm.

Π£Π»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° для ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ Pydantic, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ:

  • Π°Π²Ρ‚ΠΎΠ΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅
  • Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ
  • Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³
  • поиск
  • инспСкции

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ модСль

Π’Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ прямой доступ ΠΊΠΎ всСм Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΌΠΎΠ΄Π΅Π»ΠΈ:

Python 3.6 ΠΈ Π²Ρ‹ΡˆΠ΅Python 3.10 ΠΈ Π²Ρ‹ΡˆΠ΅

 ΠΎΡ‚ Π²Π²ΠΎΠ΄Π° import Union
ΠΈΠ· fastapi ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ FastAPI
ΠΈΠ· pydantic ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ BaseModel
Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ класса (Базовая модСль):
    Π½Π°Π·Π²Π°Π½ΠΈΠ΅: ΡƒΠ». 
    описаниС: Union[str, None] = None
    Ρ†Π΅Π½Π°: ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π°Ρ
    Π½Π°Π»ΠΎΠ³: Union[float, None] = None
ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ = FastAPI()
@app.post("/items/")
асинхронноС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ create_item (элСмСнт: элСмСнт):
    item_dict = item.dict()
    Ссли Ρ‚ΠΎΠ²Π°Ρ€.Π½Π°Π»ΠΎΠ³:
        Ρ†Π΅Π½Π°_с_Π½Π°Π»ΠΎΠ³ΠΎΠΌ = Ρ‚ΠΎΠ²Π°Ρ€.Ρ†Π΅Π½Π° + Ρ‚ΠΎΠ²Π°Ρ€.Π½Π°Π»ΠΎΠ³
        item_dict.update({"price_with_tax": price_with_tax})
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ item_dict
 
 ΠΈΠ· fastapi ΠΈΠΌΠΏΠΎΡ€Ρ‚ FastAPI
ΠΈΠ· pydantic ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ BaseModel
Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ класса (Базовая модСль):
    Π½Π°Π·Π²Π°Π½ΠΈΠ΅: ΡƒΠ».
    описаниС: ΡƒΠ» | НСт = НСт
    Ρ†Π΅Π½Π°: ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π°Ρ
    Π½Π°Π»ΠΎΠ³: ΠΏΠ»Π°Π²Π°ΡŽΡ‰ΠΈΠΉ | НСт = НСт
ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ = FastAPI()
@app.post("/items/")
асинхронноС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ create_item (элСмСнт: элСмСнт):
    item_dict = item.dict()
    Ссли Ρ‚ΠΎΠ²Π°Ρ€.Π½Π°Π»ΠΎΠ³:
        Ρ†Π΅Π½Π°_с_Π½Π°Π»ΠΎΠ³ΠΎΠΌ = Ρ‚ΠΎΠ²Π°Ρ€.Ρ†Π΅Π½Π° + Ρ‚ΠΎΠ²Π°Ρ€.Π½Π°Π»ΠΎΠ³
        item_dict.update({"price_with_tax": price_with_tax})
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ item_dict
 

Π’Π΅Π»ΠΎ запроса + ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΡƒΡ‚ΠΈ

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΡƒΡ‚ΠΈ ΠΈ Ρ‚Π΅Π»ΠΎ запроса ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

FastAPI распознаСт, Ρ‡Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ ΠΏΡƒΡ‚ΠΈ, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ взяты ΠΈΠ· ΠΏΡƒΡ‚ΠΈ , Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ ΠΌΠΎΠ΄Π΅Π»ΠΈ Pydantic, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ взяты ΠΈΠ· Ρ‚Π΅Π»Π° запроса .

Python 3.6 ΠΈ Π²Ρ‹ΡˆΠ΅Python 3.10 ΠΈ Π²Ρ‹ΡˆΠ΅

 ΠΎΡ‚ Π²Π²ΠΎΠ΄Π° import Union
ΠΈΠ· fastapi ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ FastAPI
ΠΈΠ· pydantic ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ BaseModel
Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ класса (Базовая модСль):
    Π½Π°Π·Π²Π°Π½ΠΈΠ΅: ΡƒΠ».
    описаниС: Union[str, None] = None
    Ρ†Π΅Π½Π°: ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π°Ρ
    Π½Π°Π»ΠΎΠ³: Union[float, None] = None
ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ = FastAPI()
@app.put("/items/{item_id}")
async def create_item (item_id: int, item: Item):
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ {"item_id": item_id, **item.dict()}
 
 ΠΈΠ· fastapi ΠΈΠΌΠΏΠΎΡ€Ρ‚ FastAPI
ΠΈΠ· pydantic ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ BaseModel
Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ класса (Базовая модСль):
    Π½Π°Π·Π²Π°Π½ΠΈΠ΅: ΡƒΠ».
    описаниС: ΡƒΠ» | НСт = НСт
    Ρ†Π΅Π½Π°: ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π°Ρ
    Π½Π°Π»ΠΎΠ³: ΠΏΠ»Π°Π²Π°ΡŽΡ‰ΠΈΠΉ | НСт = НСт
ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ = FastAPI()
@app.put("/items/{item_id}")
async def create_item (item_id: int, item: Item):
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ {"item_id": item_id, **item.dict()}
 

Π’Π΅Π»ΠΎ запроса + ΠΏΡƒΡ‚ΡŒ + ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ запроса

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ body , path ΠΈ query ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ.

FastAPI распознаСт ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… ΠΈ Π²ΠΎΠ·ΡŒΠΌΠ΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ мСста.

Python 3.6 ΠΈ Π²Ρ‹ΡˆΠ΅Python 3.10 ΠΈ Π²Ρ‹ΡˆΠ΅

 ΠΎΡ‚ Π²Π²ΠΎΠ΄Π° import Union
ΠΈΠ· fastapi ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ FastAPI
ΠΈΠ· pydantic ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ BaseModel
Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ класса (Базовая модСль):
    Π½Π°Π·Π²Π°Π½ΠΈΠ΅: ΡƒΠ».
    описаниС: Union[str, None] = None
    Ρ†Π΅Π½Π°: ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π°Ρ
    Π½Π°Π»ΠΎΠ³: Union[float, None] = None
ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ = FastAPI()
@app.put("/items/{item_id}")
async def create_item (item_id: int, item: Item, q: Union[str, None] = None):
    Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = {"item_id": item_id, **item.dict()}
    Ссли д:
        Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅({"q": q})
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚
 
 ΠΈΠ· fastapi ΠΈΠΌΠΏΠΎΡ€Ρ‚ FastAPI
ΠΈΠ· pydantic ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ BaseModel
Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ класса (Базовая модСль):
    Π½Π°Π·Π²Π°Π½ΠΈΠ΅: ΡƒΠ».
    описаниС: ΡƒΠ» | НСт = НСт
    Ρ†Π΅Π½Π°: ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π°Ρ
    Π½Π°Π»ΠΎΠ³: ΠΏΠ»Π°Π²Π°ΡŽΡ‰ΠΈΠΉ | НСт = НСт
ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ = FastAPI()
@app.put("/items/{item_id}")
async def create_item (item_id: int, item: Item, q: str | None = None):
    Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ = {"item_id": item_id, **item.dict()}
    Ссли д:
        Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅({"q": q})
    Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚
 

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Ρ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

  • Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Ρ‚Π°ΠΊΠΆΠ΅ объявлСн Π² ΠΏΡƒΡ‚ΠΈ , ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΏΡƒΡ‚ΠΈ.
  • Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ СдинствСнного числа (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, int , float , str , bool ΠΈ Ρ‚. Π΄.), ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ запроса .
  • Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ объявлСн ΠΊΠ°ΠΊ Ρ‚ΠΈΠΏ ΠΌΠΎΠ΄Π΅Π»ΠΈ Pydantic , ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ ΠΊΠ°ΠΊ Ρ‚Π΅Π»ΠΎ запроса .

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

FastAPI Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ q Π½Π΅ трСбуСтся, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ = None .

Union Π² Union[str, None] Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ FastAPI, Π½ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π²Π°ΡˆΠ΅ΠΌΡƒ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Ρƒ ΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π²Π°ΠΌ Π»ΡƒΡ‡ΡˆΡƒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ ошибки.

Π‘Π΅Π· ΠŸΠΈΠ΄Π°Π½Ρ‚ΠΈΠΊΠ°

Если Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠΎΠ΄Π΅Π»ΠΈ Pydantic, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Body . Π‘ΠΌ. Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ для Ρ‚Π΅Π»Π° β€” нСсколько ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²: Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹Π΅ значСния Π² Ρ‚Π΅Π»Π΅.

Π¨ΠΎΠ½ АрчСр ΡƒΡ‡ΠΈΡ‚ выстрСлам Π² Ρ‚Π΅Π»ΠΎ

ΠŸΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π΅

1 / ΠΈΠ· 13

ЧВО Π“ΠžΠ’ΠžΠ Π―Π’ ΠšΠ›Π˜Π•ΠΠ’Π«

О Π¨ΠžΠΠ• АРЧЕРЕ

Π‘Π΅Π· использования дорогостоящСго оборудования ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ СстСствСнный свСт ΠΈΠ· ΠΎΠΊΠ½Π° своСй ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€Ρ‹, Π¨ΠΎΠ½ АрчСр снискал ΠΌΠ΅ΠΆΠ΄ΡƒΠ½Π°Ρ€ΠΎΠ΄Π½ΡƒΡŽ ΠΈΠ·Π²Π΅ΡΡ‚Π½ΠΎΡΡ‚ΡŒ своими Π±Π΅Π·ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½ΠΎ ΡƒΠ·Π½Π°Π²Π°Π΅ΠΌΡ‹ΠΌΠΈ ΠΏΠΎΡ€Ρ‚Ρ€Π΅Ρ‚Π°ΠΌΠΈ Π² стилС эпохи ВозроТдСния.

Автор записи

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *