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

систСмный Π²Ρ‹Π·ΠΎΠ² write(), Π½Π° самом Π΄Π΅Π»Π΅, Π½Π΅ Ρ‚Π°ΠΊΠΎΠΉ ΡƒΠΆ ΠΈ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹ΠΉ / Π₯Π°Π±Ρ€

НСдавно я Ρ‡ΠΈΡ‚Π°Π» ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» Π­Π²Π°Π½Π° ДТонса «УстойчивоС Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ API LinuxΒ». Π― полагаю, Ρ‡Ρ‚ΠΎ Π°Π²Ρ‚ΠΎΡ€ этой довольно Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ ΠΎΡˆΠΈΠ±Π°Π΅Ρ‚ΡΡ, говоря ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ ΠΎΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ write() (ΠΈ Π² Ρ‚ΠΎΠΌ Π²ΠΈΠ΄Π΅, Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΎΠ½Π° описана Π² стандартС POSIX, ΠΈ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅). Начну с Ρ†ΠΈΡ‚Π°Ρ‚Ρ‹ ΠΈΠ· ΡΡ‚Π°Ρ‚ΡŒΠΈ:

БистСмный Π²Ρ‹Π·ΠΎΠ² write() ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½ Π² стандартС IEEE POSIX ΠΊΠ°ΠΊ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° записи Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ дСскриптор. ПослС ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ write() ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π΅ Π±Π°ΠΉΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π΄ΠΎ этого записаны, дСлая это Π΄Π°ΠΆΠ΅ Π² Ρ‚ΠΎΠΌ случаС, Ссли ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΈΡ… процСссов ΠΈΠ»ΠΈ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² (Π²ΠΎΡ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ€Π°Π·Π΄Π΅Π» стандарта POSIX). Π—Π΄Π΅ΡΡŒ, Π² Ρ€Π°Π·Π΄Π΅Π»Π΅, посвящённом Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΈΡŽ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΌΠΈ опСрациями, имССтся ΠΏΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ говорится, Ρ‡Ρ‚ΠΎ Ссли ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π΄Π²ΡƒΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ всС ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ послСдствия, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°, Π»ΠΈΠ±ΠΎ Π½Π΅ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… послСдствий.

Π­Ρ‚ΠΎ позволяСт ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ всС Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ рСсурса, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚.

ΠžΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π»ΠΈ это, Ρ‡Ρ‚ΠΎ опСрация write() являСтся Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠΉ? Π‘ тСхничСской Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния β€” Π΄Π°. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния Π΄Π°Π½Π½Ρ‹Ρ… Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ всё, Π»ΠΈΠ±ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ записано с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ write(). […].

К соТалСнию, Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи, Π² Ρ†Π΅Π»ΠΎΠΌ, Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹ β€” это Π½Π΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ говорится Π² стандартС POSIX, ΠΈ Π΄Π°ΠΆΠ΅ Ссли ΠΈΠΌΠ΅Π½Π½ΠΎ это ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚Π°Π»ΠΈΡΡŒ Π²Ρ‹Ρ€Π°Π·ΠΈΡ‚ΡŒ Π°Π²Ρ‚ΠΎΡ€Ρ‹ стандарта β€” вСсьма вСроятно Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½ΠΈ ΠΎΠ΄Π½Π° вСрсия Unix этому стандарту Π½Π΅ соотвСтствуСт, ΠΈ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π½ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· Π½ΠΈΡ… Π½Π΅ Π΄Π°Ρ‘Ρ‚ Π½Π°ΠΌ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄ записи Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго, Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² стандартС POSIX Ρ‡Ρ‘Ρ‚ΠΊΠΎ сказано ΠΎΠ± атомарности, примСняСтся лишь Π² Π΄Π²ΡƒΡ… ситуациях: ΠΊΠΎΠ³Π΄Π° Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ ΠΈΠ»ΠΈ Π² FIFO, ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° Ρ€Π΅Ρ‡ΡŒ ΠΈΠ΄Ρ‘Ρ‚ ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ процСсса, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ… Π½Π΅ΠΊΠΈΠ΅ дСйствия. А Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ стандарт POSIX Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎΠ± опСрациях записи, ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹Ρ… с опСрациями чтСния, ΠΈΠΌΠ΅Π΅Ρ‚ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ примСнСния.

ΠŸΠΎΠ·Π²ΠΎΠ»ΡŒΡ‚Π΅ ΠΌΠ½Π΅ ΠΏΡ€ΠΎΡ†ΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ стандарт (Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ β€” ΠΌΠΎΡ‘):

ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΡ‘Π» ΡƒΡΠΏΠ΅ΡˆΠ½Ρ‹ΠΉ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΈΠ· ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи (write()) Π² ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»:

  • Π›ΡŽΠ±Π°Ρ ΡƒΡΠΏΠ΅ΡˆΠ½Π°Ρ опСрация чтСния (read()) Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Ρ„Π°ΠΉΠ»Π°, которая Π±Ρ‹Π»Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π° этой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ записи, Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, установлСнныС для этой ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ write() Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ‚Π°ΠΊΠΈΡ… позициях Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ снова ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹.
Π­Ρ‚ΠΎ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ особого повСдСния ΠΎΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄ чтСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Ρ„Π°ΠΉΠ»Π°, Π·Π°ΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΠΌ процСссом Π΄ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ записи (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ‚Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Ρ‡Π°Π»ΠΈΡΡŒ Π΄ΠΎ Π½Π°Ρ‡Π°Π»Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ write()). Если Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ read(), POSIX позволяСт этой ΠΊΠΎΠΌΠ°Π½Π΄Π΅ вовсС Π½Π΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, записываСмыС write(), ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ лишь Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ этих Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΡ… всС. Подобная ΠΊΠΎΠΌΠ°Π½Π΄Π°
read()
(тСорСтичСски) являСтся Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠΉ Π² Ρ‚ΠΎΠΌ случаС, Ссли Π΅Ρ‘ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΈΠ· Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ самого процСсса. ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎ, Π½Π΅ рСализуСтся обычная, привычная всСм, атомарная схСма Ρ€Π°Π±ΠΎΡ‚Ρ‹, ΠΊΠΎΠ³Π΄Π° Π»ΠΈΠ±ΠΎ Π²ΠΈΠ΄Π½Ρ‹ всС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π΅ΠΊΠΎΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π»ΠΈΠ±ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π΅Ρ‘ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π΅ Π²ΠΈΠ΄Π½Ρ‹ вовсС. Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ кросс-процСссноС Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ read() Π²ΠΎ врСмя выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ write(), Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ чтСния ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Ρƒ частичного Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ записи. ΠœΡ‹ Π½Π΅ Π½Π°Π·Π²Π°Π»ΠΈ Π±Ρ‹ Β«Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠΉΒ» SQL-Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…, которая позволяСт ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π½Π΅Π·Π°Π²Π΅Ρ€ΡˆΡ‘Π½Π½ΠΎΠΉ Ρ‚Ρ€Π°Π½Π·Π°ΠΊΡ†ΠΈΠΈ. Но ΠΈΠΌΠ΅Π½Π½ΠΎ это стандарт POSIX позволяСт ΠΊΠΎΠΌΠ°Π½Π΄Π΅
write()
, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ выполняСтся запись Π² Ρ„Π°ΠΉΠ»Ρ‹.

(Π­Ρ‚ΠΎ, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ, ΠΏΠΎΡ‡Ρ‚ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ, Π΄Π°ΡŽΡ‚ Π½Π°ΠΌ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Π΅ Unix-систСмы, хотя Ρ‚ΡƒΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ситуаций, ΠΈ Unix-систСмы я Π½Π° ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚ этого Π½Π΅ тСстировал. НапримСр, мСня Π±Ρ‹ Π½Π΅ ΡƒΠ΄ΠΈΠ²ΠΈΠ»ΠΎ, Ссли Π±Ρ‹ оказалось, Ρ‡Ρ‚ΠΎ Π²Ρ‹Ρ€ΠΎΠ²Π½Π΅Π½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌ страниц (ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠΎΠ² Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы), Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅, оказались Π±Ρ‹ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹ΠΌΠΈ Π²ΠΎ мноТСствС Unix-систСм.

)

Если ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ потрСбуСтся для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ записи Π² Ρ„Π°ΠΉΠ»Ρ‹ Π² многопроцСссной срСдС, Ρ‚ΠΎ слоТившаяся ситуация Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ. Π’Π°ΠΊ ΠΊΠ°ΠΊ Unix-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ ΠΎΠΆΠΈΠ΄Π°ΡŽΡ‚ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΡ… сСансов записи Π² Ρ„Π°ΠΉΠ»Ρ‹, ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, установив Π»ΠΈΠΌΠΈΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π΄Π°Π½Π½Ρ‹Ρ…, запись ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎ, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ² write() этим Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Ρƒ систСмы запись ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚ΠΎΠ² ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΎΠ΄Π½ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ write() ΠΈ эта опСрация Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠΉ. Π’ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ Π±ΡƒΡ„Π΅Ρ€ ядра придётся ΡΠΎΠ±ΠΈΡ€Π°Ρ‚ΡŒ слишком ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π°Π½Π½Ρ‹Ρ…, Π° Π·Π°Ρ‚Π΅ΠΌ придётся ΠΌΠ΅Π½ΡΡ‚ΡŒ Π²ΠΈΠ΄ΠΈΠΌΠΎΠ΅ состояниС ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ€Π°Π·Π΄Π΅Π»Π° Ρ„Π°ΠΉΠ»Π°, укладывая всё это Π² ΠΎΠ΄Π½ΠΎ дСйствиС. ВмСсто этого ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅, вСроятно, ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ Π½Π΅ΠΊΠΎΠ΅Π³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π±Π°ΠΉΡ‚ΠΎΠ², Π³Π΄Π΅

write() ΠΈ read() Π±Π»ΠΎΠΊΠΈΡ€ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π° ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ Π·Π°Ρ…Π²Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… ΠΈΠΌΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ². А это ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ придётся Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² этом процСссС придётся ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ участиС ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ write() ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ read().

(ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ чтСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π» для записи, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π½ΠΎ ΠΏΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅, всё Ρ€Π°Π²Π½ΠΎ, придётся Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ», дСлая Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π³ΠΎ нСльзя Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ для записи Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π° опСрация

read().)

Но Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹ лишь ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ read() Π² соврСмСнных Unix-систСмах нСдостаточно, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½Π° самом Π΄Π΅Π»Π΅, Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ Π΄Π°Π½Π½Ρ‹Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ² Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ систСмного Π²Ρ‹Π·ΠΎΠ²Π° mmap(). Если Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ трСбуСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ опСрация write() Π±Ρ‹Π»Π° Π±Ρ‹ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠΉ, Π½ΡƒΠΆΠ½ΠΎ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ чтСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· памяти ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ записи. А это Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ довольно-Ρ‚Π°ΠΊΠΈ рСсурсозатратных манипуляций с Ρ‚Π°Π±Π»ΠΈΡ†Π΅ΠΉ страниц. Если Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ Π΅Ρ‰Ρ‘ ΠΈ ΠΎ mmap()

, Ρ‚ΠΎ Π²ΠΎΠ·Π½ΠΈΠΊΠ½Π΅Ρ‚ ΠΎΠ΄Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, которая Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ осущСствляСтся Ρ‡Π΅Ρ€Π΅Π· ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΊΠΎΠΌΠ°Π½Π΄Π° write() Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠΉ Π΄Π°ΠΆΠ΅ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… страниц памяти. Π’ΠΎΡ‚, ΠΊΡ‚ΠΎ Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· памяти, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ отобраТаСтся Ρ„Π°ΠΉΠ», ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΡ‚ΡŒΡΡ со страницСй, находящСйся Π² процСссС копирования Π² Π½Π΅Ρ‘ Π±Π°ΠΉΡ‚ΠΎΠ², записанных с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ write().

(Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ Π΄Π°ΠΆΠ΅ с read() ΠΈ write(), Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΈ Ρ‚Π° ΠΈ другая ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ страницС Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Ρ„Π°ΠΉΠ»Π° Π² Π±ΡƒΡ„Π΅Ρ€Π½ΠΎΠΌ кСшС ядра. Но Ρ‚ΡƒΡ‚, вСроятно, Π»Π΅Π³Ρ‡Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ.)

Помимо ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ Ρ‚ΡƒΡ‚ Π½Π°Π±Π»ΡŽΠ΄Π°ΡŽΡ‚ΡΡ ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ со ΡΠΏΡ€Π°Π²Π΅Π΄Π»ΠΈΠ²ΠΎΡΡ‚ΡŒΡŽ распрСдСлСния систСмных рСсурсов. Если ΠΊΠΎΠΌΠ°Π½Π΄Π° write() являСтся, ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡŽ ΠΊ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ read(), Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠΉ, это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ опСрация write() ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π½Π° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя. ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ Π½Π΅ нравятся ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Π΅ ΠΈ ΠΎΡ‚ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Π½Π° ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ врСмя ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ read() ΠΈ write(). ПодобноС, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, даст ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ инструмСнт для DoS-Π°Ρ‚Π°ΠΊ ΠΏΡƒΡ‚Ρ‘ΠΌ записи Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„Π°ΠΉΠ»Ρ‹, ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ для чтСния.

Для этого достаточно снова ΠΈ снова Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ Ρƒ систСмы Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ всСм Ρ„Π°ΠΉΠ»ΠΎΠΌ Π·Π° ΠΎΠ΄ΠΈΠ½ Π·Π°Ρ…ΠΎΠ΄ (ΠΈΠ»ΠΈ Π½Π°Π΄ Ρ‚Π°ΠΊΠΈΠΌ Π΅Π³ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠΌ, Π½Π°Π΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ).

ΠŸΡ€Π°Π²Π΄Π°, большая Ρ‡Π°ΡΡ‚ΡŒ Π·Π°Ρ‚Ρ€Π°Ρ‚ систСмных рСсурсов происходит ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ рассуТдаСм ΠΎ кросс-процСссных Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Ρ… опСрациях записи, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ дСйствия ΠΏΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ядро. ΠšΡ€ΠΎΡΡ-поточная атомарная опСрация write() ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ процСсса (ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° C ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ read() ΠΈ write() ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅). Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ простой систСмой Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ всСго Ρ„Π°ΠΉΠ»Π°, хотя Ρ‚Π΅ΠΌ, ΠΊΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, это, вСроятно, Π½Π΅ понравится. Вопросы справСдливости распрСдСлСния систСмных рСсурсов ΠΈ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΈΠ·-Π·Π° Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса Ρ‚Π΅Ρ€ΡΡŽΡ‚ остроту, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ СдинствСнным, ΠΊΠΎΠΌΡƒ это ΠΏΠΎΠ²Ρ€Π΅Π΄ΠΈΡ‚, Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΡ‚, ΠΊΡ‚ΠΎ запустил ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ процСсс.

(Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ read() ΠΈ write() Π½Π°Π΄ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠΌ Π² ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ врСмя ΠΈΠ· Π΄Π²ΡƒΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ².)

P.S. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ записи Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Ρ‹ ΠΈ Π² FIFO ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹ΠΌΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΎΠ±ΡŠΡ‘ΠΌ записываСмых Π΄Π°Π½Π½Ρ‹Ρ… достаточно ΠΌΠ°Π». Π—Π°ΠΏΠΈΡΡŒ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΎΠ±ΡŠΡ‘ΠΌΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠΉ (ΠΈ Π² Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Unix-систСмах ΠΎΠ½Π° Ρ‚Π°ΠΊΠΎΠ²ΠΎΠΉ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈ Π½Π΅ являСтся). Если Π±Ρ‹ стандарт POSIX Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π» Π±Ρ‹ атомарности ΠΏΡ€ΠΈ записи ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΡ‘ΠΌΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€Ρ‹, ΠΈ ΠΏΡ€ΠΈ этом ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π» Π±Ρ‹ Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ запись Π»ΡŽΠ±Ρ‹Ρ… ΠΎΠ±ΡŠΡ‘ΠΌΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„Π°ΠΉΠ»Ρ‹ Ρ‚Π°ΠΊ ΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½ΠΎΠΉ, это выглядСло Π±Ρ‹ довольно-Ρ‚Π°ΠΊΠΈ Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ.

P.P.S. Π― с ΠΎΡΡ‚ΠΎΡ€ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ относился Π±Ρ‹ ΠΊ ΠΏΡ€ΠΈΠ½ΡΡ‚ΠΈΡŽ ΠΊΠ°ΠΊ данности Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π² Π½Π΅ΠΊΠΎΠ΅ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ Unix, Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ срСдС, ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ read() ΠΈ write(). Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, я настроСн скСптичСски, Π½ΠΎ я Π±Ρ‹ сначала это ΠΊΠ°ΠΊ слСдуСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ». Всё это ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° излишнС ΠΏΡ€ΠΈΡ…ΠΎΡ‚Π»ΠΈΠ²Ρ‹Π΅ трСбования POSIX, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ систСм Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ Π³Π»Π°Π·Π° Π²ΠΎ имя простоты ΠΈ высокой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ своих Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ.

ΠŸΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π»ΠΈ Π²Π°ΠΌ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Ρ‚ΡŒΡΡ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ, Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹ΠΌΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ записи Π² Ρ„Π°ΠΉΠ» ΠΈ чтСния ΠΈΠ· Π½Π΅Π³ΠΎ?

Π€Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄ β€” Python documentation

Π€Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΉ Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄ β€” Python documentation

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π° с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ состоит ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… этапов:

  1. ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ». ΠŸΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ слСдуСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ€Π΅ΠΆΠΈΠΌ: Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ запись.

  2. Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ запись Π΄Π°Π½Π½Ρ‹Ρ….

  3. Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ».

Рассмотрим Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для выполнСния этих дСйствий.

open(file_path, mode=’r’)

ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» file_path Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ mode. Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ file object. Полная сигнатура Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π² ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ: open. Π Π΅ΠΆΠΈΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ значСния:

  • 'r' β€” read, Ρ‡Ρ‚Π΅Π½ΠΈΠ΅

  • 'w' β€” write, запись

f. write(text)

Π—Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ строку text Π² Ρ„Π°ΠΉΠ».

f.read()

ΠŸΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ всС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°

f.close()

Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» f.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ„Π°ΠΉΠ»ΠΎΠΌ:

# ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Ρ„Π°ΠΉΠ» для записи
out_file = open('data.txt', 'w')
# ПишСм Π² Ρ„Π°ΠΉΠ» Π΄Π²Π΅ строки
out_file.write('Hello\n')
out_file.write('World\n')
# Π—Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Ρ„Π°ΠΉΠ»
out_file.close()
# Π‘Π½ΠΎΠ²Π° ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ этот ΠΆΠ΅ Ρ„Π°ΠΉΠ», Π½ΠΎ ΡƒΠΆΠ΅ для чтСния
in_file = open('data.txt', 'r')
# Π€Π°ΠΉΠ» β€” ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, для
# Π΅Π³ΠΎ построчного чтСния ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†ΠΈΠΊΠ» for
for line in in_file:
    print(f'Got line: {line}')
in_file.close()

Π—Π°Π΄Π°Ρ‡ΠΈ

  1. ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ строку ΠΈ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π΅Ρ‘ Π² Ρ„Π°ΠΉΠ» β€œdata.txt”

  2. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ записываСт Π² Ρ„Π°ΠΉΠ» всС строки, Π²Π²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ. ΠŸΡ€ΠΈΠ·Π½Π°ΠΊ ΠΊΠΎΠ½Ρ†Π° Π²Π²ΠΎΠ΄Π° β€” пустая строка. ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ имя Ρ„Π°ΠΉΠ»Π°: data.txt
    НачнитС Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ строки
    > one
    > two
    > three
    >
    Ѐайл записан.
    

    ПослС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΡΠ²ΠΈΡ‚ΡŒΡΡ Ρ„Π°ΠΉΠ» data.txt, содСрТащий Ρ‚Ρ€ΠΈ строки:

    one
    two
    three
    
  3. ΠΠ°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΅Π³ΠΎ содСрТимоС Π½Π° экран

  4. Π”ΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для Π½ΡƒΠΌΠ΅Ρ€Π°Ρ†ΠΈΠΈ строк Π² Ρ„Π°ΠΉΠ»Π΅. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ имя Ρ„Π°ΠΉΠ»Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π΅Π³ΠΎ построчно, добавляя ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкС Π΅Ρ‘ Π½ΠΎΠΌΠ΅Ρ€. Если ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ», созданный Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ Π·Π°Π΄Π°Ρ‡Π΅, Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:

    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ имя Ρ„Π°ΠΉΠ»Π°: data.txt
    1 one
    2 two
    3 three
    

    Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ строки rstrip(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ Π»ΠΈΡˆΠ½ΠΈΡ… пСрСносов сток. ПослС этого Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ Π²ΠΈΠ΄:

    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ имя Ρ„Π°ΠΉΠ»Π°: data.txt
    1 one
    2 two
    3 three
    
  5. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для раздСлСния Ρ„Π°ΠΉΠ»Π° Π½Π° части. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ имя Ρ„Π°ΠΉΠ»Π° для раздСлСния ΠΈ Ρ†Π΅Π»ΠΎΠ΅ число N. На Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Ρƒ прилоТСния мноТСство Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… содСрТит Π½Π΅ Π±ΠΎΠ»Π΅Π΅, Ρ‡Π΅ΠΌ N строк ΠΈΠ· исходного Ρ„Π°ΠΉΠ»Π°.

    ΠŸΡƒΡΡ‚ΡŒ Π½Π° Π²Ρ…ΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ подаСтся Ρ„Π°ΠΉΠ» data.txt, со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ тСкстом:

    one
    two
    three
    four
    five
    six
    seven
    eight
    nine
    ten
    

    Π‘ΡƒΠ΄Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° нСсколько Ρ„Π°ΠΉΠ»ΠΎΠ², Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… окаТСтся Π½Π΅ Π±ΠΎΠ»Π΅Π΅ Ρ‚Ρ€Π΅Ρ… строк:

    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ имя Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°: data.txt
    Π’Π²Π΅Π΄ΠΈΡ‚Π΅ максимальноС количСство строк: 3
    

    ПослС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ созданы Ρ„Π°ΠΉΠ»Ρ‹ 1.txt, 2.txt ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π’ Ρ„Π°ΠΉΠ»Π΅ 1.txt Π±ΡƒΠ΄ΡƒΡ‚ сроки:

    one
    two
    three
    

    Π’ Ρ„Π°ΠΉΠ»Π΅ 2.txt:

    four
    five
    six
    

    И Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅.

  6. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для объСдинСния Ρ„Π°ΠΉΠ»ΠΎΠ². ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ ΠΈΠΌΠ΅Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ² для объСдинСния (ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΈΠ· ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ задания) ΠΈ имя Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°.

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ

  1. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ N ΠΏΠ΅Ρ€Π²Ρ‹Ρ… строк Ρ„Π°ΠΉΠ»Π°.

  2. Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ N послСдних строк Ρ„Π°ΠΉΠ»Π°.

Read the Docs v: latest

Versions
latest
Downloads
html
On Read the Docs
Project Home
Builds

Free document hosting provided by Read the Docs.

Как ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² R (с 18 ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΠΊΠΎΠ΄Π°)

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” это Π²Π°ΠΆΠ½Ρ‹Π΅ инструмСнты Π² R. Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΎ ΠΈΡ… создании ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ β€” ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅.

Ѐункция Π² R β€” ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠžΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ синтаксис Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ R, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ ΠΈΡ… ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π’ этом руководствС ΠΌΡ‹ ΡƒΠ·Π½Π°Π΅ΠΌ всС это ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ΅: Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ функция R, ΠΊΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π² R, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, самыС популярныС встроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ -опрСдСлСнная функция, ΠΊΠ°ΠΊ Π²Ρ‹Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΈ ΠΊΠ°ΠΊ Π²ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ функция Π² R?

Ѐункция Π² R β€” это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, содСрТащий нСсколько взаимосвязанных ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ вмСстС Π² ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ порядкС ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² R ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ встроСнными ΠΈΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ (опрСдСляСмыС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ). Основная Ρ†Π΅Π»ΡŒ создания ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ — ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ повторСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Π±Π»ΠΎΠΊΠ° ΠΊΠΎΠ΄Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ, часто выполняСмой Π² ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½Ρ‹Π΅ ΠΈ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΠΎΡ‚Π»Π°ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ ошибки. связанных с опСрациями копирования-вставки, ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΌ. Π₯ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ являСтся созданиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΊΠΎΠΌΠ°Π½Π΄ Π±ΠΎΠ»Π΅Π΅ Π΄Π²ΡƒΡ… Ρ€Π°Π·.

ВстроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ R

Π’ R сущСствуСт мноТСство ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ. НСкоторыС ΠΈΠ· самых популярных:

  • min() , max() , mean() , median() — Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ минимальноС/максимальноС/срСднСС/ΠΌΠ΅Π΄ΠΈΠ°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ числового Π²Π΅ΠΊΡ‚ΠΎΡ€Π°, соотвСтствСнно
  • sum() – Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ сумму числового Π²Π΅ΠΊΡ‚ΠΎΡ€Π°
  • range() β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ минимальноС ΠΈ максимальноС значСния числового Π²Π΅ΠΊΡ‚ΠΎΡ€Π°
  • abs() – Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ числа
  • str() β€” ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ структуру ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° R
  • print() β€” ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ R Π½Π° консоли
  • ncol() β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство столбцов ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΈΠ»ΠΈ ΠΊΠ°Π΄Ρ€Π° Π΄Π°Π½Π½Ρ‹Ρ…
  • length() β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство элСмСнтов Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ R (Π²Π΅ΠΊΡ‚ΠΎΡ€, список ΠΈ Ρ‚. Π΄.)
  • nchar() β€” Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство символов Π² символьном ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅
  • sort() – сортируСт Π²Π΅ΠΊΡ‚ΠΎΡ€ ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ ΠΈΠ»ΠΈ ΡƒΠ±Ρ‹Π²Π°Π½ΠΈΡŽ ( ΠΏΠΎ ΡƒΠ±Ρ‹Π²Π°Π½ΠΈΡŽ=TRUE ) Π² порядкС
  • exists() — Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ TRUE ΠΈΠ»ΠΈ FALSE Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π»ΠΈ пСрСмСнная Π² срСдС R

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π²Ρ‹ΡˆΠ΅ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² дСйствии:

 vector <- c(3, 5, 2, 3, 1, 4)
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (ΠΌΠΈΠ½ (Π²Π΅ΠΊΡ‚ΠΎΡ€))
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (срСднСС (Π²Π΅ΠΊΡ‚ΠΎΡ€))
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (ΠΌΠ΅Π΄ΠΈΠ°Π½Π° (Π²Π΅ΠΊΡ‚ΠΎΡ€))
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (сумма (Π²Π΅ΠΊΡ‚ΠΎΡ€))
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ (Π²Π΅ΠΊΡ‚ΠΎΡ€))
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (ΡƒΠ» (Π²Π΅ΠΊΡ‚ΠΎΡ€))
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (Π΄Π»ΠΈΠ½Π° (Π²Π΅ΠΊΡ‚ΠΎΡ€))
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (сортировка (Π²Π΅ΠΊΡ‚ΠΎΡ€, ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ = ИБВИНА))
print(exists('vector')) ## ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ 
 [1] 1
[1] 3
[1] 3
[1] 18
[1] 1 5
 число [1:6] 3 5 2 3 1 4
ΠΠ£Π›Π•Π’ΠžΠ™
[1] 6
[1] 5 4 3 3 2 1
[1] TRUE 

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² R

Π’ Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΎΠ±Ρ‰ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ, часто Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ выполнСния ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌΡƒΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² R, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово function . Бинтаксис ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

 имя_Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ <- функция(ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹){
  Ρ‚Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
} 

Π’Ρ‹ΡˆΠ΅ основныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ R: имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ , ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Ρ‚Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ . Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ.

Имя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π­Ρ‚ΠΎ имя ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² срСдС R послС опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для Π²Ρ‹Π·ΠΎΠ²Π° этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Оно Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΌ, Π½ΠΎ Ρ‡Π΅Ρ‚ΠΊΠΈΠΌ ΠΈ осмыслСнным, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ, Ρ‡ΠΈΡ‚Π°ΡŽΡ‰ΠΈΠΉ наш ΠΊΠΎΠ΄, ΠΌΠΎΠ³ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ эта функция. НапримСр, Ссли Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для вычислСния Π΄Π»ΠΈΠ½Ρ‹ окруТности с извСстным радиусом, Π»ΡƒΡ‡ΡˆΠ΅ Π½Π°Π·Π²Π°Ρ‚ΡŒ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΠΊΡ€ΡƒΠΆΠ½ΠΎΡΡ‚ΡŒ вмСсто function_1 ΠΈΠ»ΠΈ ΠΎΠΊΡ€ΡƒΠΆΠ½ΠΎΡΡ‚ΡŒ_окруТности . ( ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π₯отя ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π³Π»Π°Π³ΠΎΠ»Ρ‹ Π² ΠΈΠΌΠ΅Π½Π°Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅, Ссли это ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ являСтся ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΈ нСдвусмыслСнным. )

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Иногда ΠΈΡ… Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ . ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” это ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹Π΅ Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки ΠΈ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ запятой, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ установлСны Π² фактичСскиС значСния (Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ 9).0087 Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ) ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. НапримСр:

 ΠΎΠΊΡ€ΡƒΠΆΠ½ΠΎΡΡ‚ΡŒ <- function(r){
    2*ΠΏΠΈ*Ρ€
}
print(circumference(2)) 
 [1] 12,56637 

Π’Ρ‹ΡˆΠ΅ ΠΌΡ‹ создали Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для вычислСния Π΄Π»ΠΈΠ½Ρ‹ окруТности с извСстным радиусом ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅ $C = 2\pi$$r$, поэтому функция ΠΈΠΌΠ΅Π΅Ρ‚ СдинствСнный ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ r . ПослС опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΡ‹ Π²Ρ‹Π·Π²Π°Π»ΠΈ Π΅Π΅ с радиусом, Ρ€Π°Π²Π½Ρ‹ΠΌ 2 (ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, с Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ 2).

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, хотя ΠΈ Ρ€Π΅Π΄ΠΊΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ функция Π½Π΅ ΠΈΠΌΠ΅Π»Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²:

 hello_world <- функция(){
    'ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!'
}
print(hello_world()) 
 [1] "ΠŸΡ€ΠΈΠ²Π΅Ρ‚, ΠΌΠΈΡ€!" 

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ установлСны Π½Π° значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (относящиСся ΠΊ Ρ‚ΠΈΠΏΠΈΡ‡Π½ΠΎΠΌΡƒ ΡΠ»ΡƒΡ‡Π°ΡŽ) Π²Π½ΡƒΡ‚Ρ€ΠΈ опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Ρ‚Π΅ΠΌ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡΠ±Ρ€ΠΎΡˆΠ΅Π½Ρ‹ ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡΡΡŒ ΠΊ нашСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ окруТности , ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ радиус ΠΊΡ€ΡƒΠ³Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ€Π°Π²Π½Ρ‹ΠΌ 1, поэтому, Ссли ΠΌΡ‹ Π²Ρ‹Π·ΠΎΠ²Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π±Π΅Π· ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, ΠΎΠ½Π° рассчитаСт Π΄Π»ΠΈΠ½Ρƒ окруТности Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΡ€ΡƒΠ³Π° (Ρ‚. Π΅. ΠΊΡ€ΡƒΠ³Π° с радиусом 1 ). Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΎΠ½ рассчитаСт Π΄Π»ΠΈΠ½Ρƒ окруТности с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ радиусом:

 ΠΎΠΊΡ€ΡƒΠΆΠ½ΠΎΡΡ‚ΡŒ <- функция (r=1){
    2*ΠΏΠΈ*Ρ€
}
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (ΠΎΠΊΡ€ΡƒΠΆΠ½ΠΎΡΡ‚ΡŒ ())
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ(ΠΎΠΊΡ€ΡƒΠΆΠ½ΠΎΡΡ‚ΡŒ(2)) 
 [1] 6.283185
[1] 12.56637 

Π’Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π’Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ β€” это Π½Π°Π±ΠΎΡ€ ΠΊΠΎΠΌΠ°Π½Π΄, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ Π² Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΌ порядкС ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Π² Ρ‚Π΅Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΡ‹ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Π΅ΠΌ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

 sum_two_nums <- function(x, y){
    Ρ… + Ρƒ
}
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (sum_two_nums (1, 2)) 
 [1] 3 

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π² Ρ‚Π΅Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ β€” СдинствСнный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ x + y ) Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ отступ Π² 2 ΠΈΠ»ΠΈ 4 ΠΏΡ€ΠΎΠ±Π΅Π»Π°, Π² зависимости ΠΎΡ‚ IDE, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ запускаСм ΠΊΠΎΠ΄, Π½ΠΎ Π²Π°ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ согласованным с отступом Π²ΠΎ всСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π₯отя это Π½Π΅ влияСт Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ΠΈ Π½Π΅ являСтся ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, ΠΎΠ½ ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°.

Π€ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ, Ссли Ρ‚Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ содСрТит ΠΎΠ΄ΠΈΠ½ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€. НапримСр:

 sum_two_nums <- function(x, y) x + y
print(sum_two_nums(1, 2)) 
 [1] 3 

Как ΠΌΡ‹ Π²ΠΈΠ΄Π΅Π»ΠΈ ΠΈΠ· всСх ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², Π² R ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅Ρ‚ нСобходимости явно Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ return ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ функция R просто автоматичСски Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ послСднСС ΠΎΡ†Π΅Π½Π΅Π½Π½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ‚Π΅Π»Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Однако ΠΌΡ‹ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ return Π² Ρ‚Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ синтаксис return(expression_to_be_returned) . Π­Ρ‚ΠΎ становится Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½Ρ‹ΠΌ, Ссли Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. НапримСр:

 mean_median <- function(vector){
    срСднСС <- срСднСС (Π²Π΅ΠΊΡ‚ΠΎΡ€)
    ΠΌΠ΅Π΄ΠΈΠ°Π½Π° <- ΠΌΠ΅Π΄ΠΈΠ°Π½Π° (Π²Π΅ΠΊΡ‚ΠΎΡ€)
    Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ (с (срСднСС, ΠΌΠ΅Π΄ΠΈΠ°Π½Π°))
}
print(mean_median(c(1, 1, 1, 2, 3))) 
 [1] 1.6 1.0 

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ return Π²Ρ‹ΡˆΠ΅ ΠΌΡ‹ фактичСски Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Π²Π΅ΠΊΡ‚ΠΎΡ€ , содСрТащий Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, Π° Π½Π΅ просто ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ запятой (ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ функция return() ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ R). ВмСсто Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ список, особСнно Ссли прСдполагаСтся, Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ….

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

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

Если ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΠΎ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ , Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Ρ‡Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

 subtract_two_nums <- function(x, y){
    Ρ… - Ρƒ
}
print(subtract_two_nums(3, 1)) 
 [1] 2 

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ x Ρ€Π°Π²Π½ΠΎ 3, Π° y – 1, Π° Π½Π΅ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚.

Если ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ , Ρ‚. Π΅. явно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ, ΠΊΠ°ΠΊΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΎ порядок Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния:

 subtract_two_nums <- function(x, y){
    Ρ… - Ρƒ
}
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (Π²Ρ‹Ρ‡Π΅ΡΡ‚ΡŒ_two_nums (x = 3, y = 1))
print(subtract_two_nums(y=1, x=3)) 
 [1] 2
[1] 2 

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΡ‹ явно присвоили x=3 ΠΈ y=1 , ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΈΡ… ΠΊΠ°ΠΊ x=3, y=1 ΠΈΠ»ΠΈ y=1, x=3 – Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎ ΠΆΠ΅ самоС.

МоТно ΡΠΌΠ΅ΡˆΠΈΠ²Π°Ρ‚ΡŒ сопоставлСниС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π½Π° основС ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΈ ΠΈΠΌΠ΅Π½ΠΈ. Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для расчСта BMR (Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚Π°Π±ΠΎΠ»ΠΈΠ·ΠΌΠ°), ΠΈΠ»ΠΈ суточного потрСблСния ΠΊΠ°Π»ΠΎΡ€ΠΈΠΉ, для ΠΆΠ΅Π½Ρ‰ΠΈΠ½ Π½Π° основС ΠΈΡ… вСса (Π² ΠΊΠ³), роста (Π² см) ΠΈ возраста (Π² Π³ΠΎΠ΄Π°Ρ…). Π€ΠΎΡ€ΠΌΡƒΠ»Π°, которая Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, прСдставляСт собой ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠœΠΈΡ„Ρ„Π»ΠΈΠ½Π°-Π‘Π΅Π½Ρ‚-Π”ΠΆΠΎΡ€Π°:

 calculate_calories_women <- function(вСс, рост, возраст){
    (10 * вСс) + (6,25 * рост) - (5 * возраст) - 161
} 

Π’Π΅ΠΏΠ΅Ρ€ΡŒ посчитаСм ΠΊΠ°Π»ΠΎΡ€ΠΈΠΈ для ΠΆΠ΅Π½Ρ‰ΠΈΠ½Ρ‹ 30 Π»Π΅Ρ‚, вСсом 60 ΠΊΠ³ ΠΈ ростом 165 см. Однако для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° age ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ, Π° для Π΄Π²ΡƒΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΄ΠΈΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΠΎ полоТСнию:

 print(calculate_calories_women(age=30, 60, 165)) 
 [1 ] 1320.25 

Π’ случаС, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΌ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌΡƒ (ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ смСшиваСм сопоставлСниС ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΈ ΠΏΠΎ полоТСнию), ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡŽΡ‚ΡΡ ΠΈΠ· всСй ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ ΡΠΎΠΏΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌΠΈ, Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΡΠΎΠΏΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎ полоТСнию, Ρ‚. Π΅. Π² Ρ‚ΠΎΠΌ ΠΆΠ΅ порядкС, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΠ½ΠΈ ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Однако эта ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Π½Π΅ рСкомСндуСтся ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Π΅.

НаконСц, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ (ΠΈΠ»ΠΈ всС) Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ, Ссли ΠΌΡ‹ установим для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… (ΠΈΠ»ΠΈ всСх) ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π²Π½ΡƒΡ‚Ρ€ΠΈ опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ВСрнСмся ΠΊ нашСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ calculate_calories_women ΠΈ установим возраст ΠΆΠ΅Π½Ρ‰ΠΈΠ½Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 30 Π»Π΅Ρ‚:

 calculate_calories_women <- function(weight, height, age=30){
    (10 * вСс) + (6,25 * рост) - (5 * возраст) - 161
}
print(calculate_calories_women(60, 165)) 
 [1] 1320,25 

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

ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ присваиваСм Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ этой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΅ ΠΏΠΎΠ·ΠΆΠ΅:

 ΠΎΠΊΡ€ΡƒΠΆΠ½ΠΎΡΡ‚ΡŒ <- функция (r){
    2*ΠΏΠΈ*Ρ€
}
ΠΎΠΊΡ€ΡƒΠΆΠ½ΠΎΡΡ‚ΡŒ_радиус_5 <- ΠΎΠΊΡ€ΡƒΠΆΠ½ΠΎΡΡ‚ΡŒ (5)
print(circumference_radius_5) 
 [1] 31.41593 

ИспользованиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

Π’Π½ΡƒΡ‚Ρ€ΠΈ опрСдСлСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ R ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠœΡ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ Ρ‚Π°ΠΊΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π°Π½Π΅Π΅, ΠΊΠΎΠ³Π΄Π° использовали встроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ mean() ΠΈ median() Π²Π½ΡƒΡ‚Ρ€ΠΈ опрСдСляСмой ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ mean_median :

 mean_median <- function(vector){
    срСднСС <- срСднСС (Π²Π΅ΠΊΡ‚ΠΎΡ€)
    ΠΌΠ΅Π΄ΠΈΠ°Π½Π° <- ΠΌΠ΅Π΄ΠΈΠ°Π½Π° (Π²Π΅ΠΊΡ‚ΠΎΡ€)
    Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ (с (срСднСС, ΠΌΠ΅Π΄ΠΈΠ°Π½Π°))
} 

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π²Ρ‹Π·ΠΎΠ²Π° ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ нСпосрСдствСнно Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

 radius_from_diameter <- function(d){
    Π΄/2
}
ΠΎΠΊΡ€ΡƒΠΆΠ½ΠΎΡΡ‚ΡŒ <- функция (Π³) {
    2*ΠΏΠΈ*Ρ€
}
print(circumference(radius_from_diameter(4))) 
 [1] 12. 56637 

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅ ΠΊΠΎΠ΄Π° ΠΌΡ‹ сначала создали Π΄Π²Π΅ простыС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: для вычислСния радиуса ΠΊΡ€ΡƒΠ³Π° ΠΏΠΎ Π΅Π³ΠΎ Π΄ΠΈΠ°ΠΌΠ΅Ρ‚Ρ€Ρƒ ΠΈ для вычислСния Π΄Π»ΠΈΠ½Ρ‹ окруТности. учитывая Π΅Π³ΠΎ радиус. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΌΡ‹ Π·Π½Π°Π»ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΈΠ°ΠΌΠ΅Ρ‚Ρ€ окруТности (Ρ€Π°Π²Π½Ρ‹ΠΉ 4), ΠΌΡ‹ Π½Π°Π·Π²Π°Π»ΠΈ 9Ѐункция 0016 radius_from_diameter Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ окруТности для вычислСния сначала радиуса ΠΈΠ· прСдоставлСнного значСния Π΄ΠΈΠ°ΠΌΠ΅Ρ‚Ρ€Π°, Π° Π·Π°Ρ‚Π΅ΠΌ вычислСния Π΄Π»ΠΈΠ½Ρ‹ окруТности. Π₯отя этот ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π΅Π½ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… случаях, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ остороТны с Π½ΠΈΠΌ ΠΈ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ слишком большого количСства Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π΄Ρ€ΡƒΠ³ΠΈΠΌ функциям, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Π»ΠΈΡΡ‚ΡŒ Π½Π° Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°.

НаконСц, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ , Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Допустим, Π½Π°ΠΌ Π½ΡƒΠΆΠ½Π° функция, которая суммируСт ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ окруТностСй 3-Ρ… Π½Π΅ΠΏΠ΅Ρ€Π΅ΡΠ΅ΠΊΠ°ΡŽΡ‰ΠΈΡ…ΡΡ окруТностСй: 92 } ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ_ΠΊΡ€ΡƒΠ³Π° (r1) + ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ_ΠΊΡ€ΡƒΠ³Π° (r2) + ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ_ΠΊΡ€ΡƒΠ³Π° (r3) } print(sum_circle_ares(1, 2, 3))

 [1] 43,9823 

Π’Ρ‹ΡˆΠ΅ ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ circle_area Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sum_circle_ares . Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ Π²Ρ‹Π·Π²Π°Π»ΠΈ эту Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΡŽΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π° ( circle_area(r1) , circle_area(r2) ΠΈ circle_area(r3) ) Π²Π½ΡƒΡ‚Ρ€ΠΈ внСшнСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΡ€ΡƒΠ³Π° для дальнСйшСго суммирования этих областСй. Π’Π΅ΠΏΠ΅Ρ€ΡŒ, Ссли ΠΌΡ‹ попытаСмся Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ circle_area функция Π²Π½Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sum_circle_ares , ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π΄Π°Π΅Ρ‚ ΠΎΡˆΠΈΠ±ΠΊΡƒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ внутрСнняя функция сущСствуСт ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π³Π΄Π΅ ΠΎΠ½Π° Π±Ρ‹Π»Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π°:

 print(circle_area(10)) 
 Ошибка Π² circle_area(10) : Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π½Π°ΠΉΡ‚ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ "circle_area"
Π’Ρ‹ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ:
1. print(circle_area(10)) 

ΠŸΡ€ΠΈ Π²Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΎ Π΄Π²ΡƒΡ… Π²Π΅Ρ‰Π°Ρ…:

  1. Как ΠΈ ΠΏΡ€ΠΈ создании любой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, внутрСнняя функция Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ внСшнСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 3 Ρ€Π°Π·. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΅Π³ΠΎ нСцСлСсообразно. 92 } sum_circle_ares <- функция (r1, r2, r3){ ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ_ΠΊΡ€ΡƒΠ³Π° (r1) + ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ_ΠΊΡ€ΡƒΠ³Π° (r2) + ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ_ΠΊΡ€ΡƒΠ³Π° (r3) } ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (sum_circle_ares (1, 2, 3)) ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ (ΠΊΡ€ΡƒΠ³_ΠΎΠ±Π»Π°ΡΡ‚ΡŒ (10))
     [1] 43,9823
    [1] 314. 1593 

    Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ снова ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ circle_area Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ sum_circle_ares . Однако Π½Π° этот Ρ€Π°Π· ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ смогли Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π²Π½Π΅ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Π° Π½Π΅ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

    РСзюмС

    Π’ этом ΡƒΡ€ΠΎΠΊΠ΅ ΠΌΡ‹ ΡƒΠ·Π½Π°Π»ΠΈ довольно ΠΌΠ½ΠΎΠ³ΠΎ аспСктов, связанных с функциями Π² R. Π’ частности, ΠΌΡ‹ обсудили ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

    • Π’ΠΈΠΏΡ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² R
    • Π—Π°Ρ‡Π΅ΠΌ ΠΈ ΠΊΠΎΠ³Π΄Π° Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ
    • НСкоторыС ΠΈΠ· самых популярных встроСнных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² R ΠΈ для Ρ‡Π΅Π³ΠΎ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ
    • Как ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅ΠΌΡƒΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ
    • ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
    • Π›ΡƒΡ‡ΡˆΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ имСнования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ
    • Когда ΠΈ ΠΊΠ°ΠΊ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ для ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ
    • Π’Π΅Π»ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ особСнности Π΅Π΅ синтаксиса
    • Когда ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ явно Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ return Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
    • Как Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ R с ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ, ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΌΠΈ ΠΈΠ»ΠΈ ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹ΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ
    • Π§Ρ‚ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ смСшиваСм ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΈ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ β€” ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ это Π½Π΅ рСкомСндуСтся
    • Когда ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ (ΠΈΠ»ΠΈ всС) Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹
    • Как ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ
    • Как ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ
    • Когда ΠΈ ΠΊΠ°ΠΊ Π²ΠΊΠ»Π°Π΄Ρ‹Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

    Обладая этими Π½Π°Π²Ρ‹ΠΊΠ°ΠΌΠΈ ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ, Π²Ρ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ созданию ΠΈ использованию Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² R.

    Ѐункция Write() Π² Python

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

    Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ функция Write() Π² Python?

    Π’ Python функция write() β€” это встроСнная функция, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ„Π°ΠΉΠ». Π­Ρ‚Π° функция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π½Π° Π²Ρ…ΠΎΠ΄ строку ΠΈ записываСт Π΅Π΅ Π² ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Ѐункция write() ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Π° ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для записи Π² Ρ„Π°ΠΉΠ» самых Ρ€Π°Π·Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ тСкст, числа ΠΈ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅.

    Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ write(), Π²Π°ΠΌ сначала Π½ΡƒΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ», Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ open(). Π—Π°Ρ‚Π΅ΠΌ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ write() для Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ваши Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ„Π°ΠΉΠ». По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ записаны Π² ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π°, Π½ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ seek() для пСрСмСщСния указатСля Ρ„Π°ΠΉΠ»Π° Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ мСсто, Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ мСсто Π² Ρ„Π°ΠΉΠ»Π΅.

    ΠŸΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ write() Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ ΠΎΠ± ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ошибок. Π—Π°ΠΏΠΈΡΡŒ Π² Ρ„Π°ΠΉΠ» ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ‚ΡŒΡΡ сбоСм ΠΏΠΎ Ρ‚Π°ΠΊΠΈΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ, ΠΊΠ°ΠΊ Π½Π΅Ρ…Π²Π°Ρ‚ΠΊΠ° мСста Π½Π° дискС, ΠΏΡ€Π°Π²Π° доступа ΠΊ Ρ„Π°ΠΉΠ»Ρƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ ΠΈΠ»ΠΈ поврСТдСния Π΄Π°Π½Π½Ρ‹Ρ…, рСкомСндуСтся ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹Π΅ ошибки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΏΡ€ΠΈ записи Π² Ρ„Π°ΠΉΠ».

    Π’ Ρ†Π΅Π»ΠΎΠΌ, функция write() β€” ΠΌΠΎΡ‰Π½Ρ‹ΠΉ ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ инструмСнт для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Π² Python. НСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π»ΠΈ Π²Ρ‹ нСбольшой тСкстовый Ρ„Π°ΠΉΠ» ΠΈΠ»ΠΈ большой Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», функция write() обСспСчиваСт простой ΠΈ эффСктивный способ записи Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„Π°ΠΉΠ».

    Бинтаксис Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ записи Π² Python

    Бинтаксис Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ записи Π² Python ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

     file. write(str) 

    строка ΠΈΠ»ΠΈ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Ρ„Π°ΠΉΠ».

    Ѐункция write() ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ СдинствСнный Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ собой строку ΠΈΠ»ΠΈ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Ρ„Π°ΠΉΠ». Π­Ρ‚ΠΎΡ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ строкового Ρ‚ΠΈΠΏΠ° ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² строку.

    ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ записи Π² Python

    Ѐункция записи Π² Python ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ β€” строку ΠΈΠ»ΠΈ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Ρ„Π°ΠΉΠ». АргумСнт Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ строковый Ρ‚ΠΈΠΏ ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ Π² строку.

    Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ функция write() Π½Π΅ добавляСт автоматичСски символ Π½ΠΎΠ²ΠΎΠΉ строки Π² ΠΊΠΎΠ½Π΅Ρ† строки. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Ρ„Π°ΠΉΠ» нСсколько строк, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ символ Π½ΠΎΠ²ΠΎΠΉ строки ("\n") Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки.

    Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ записи Π² Python

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

    Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ write() для записи строки Π² Ρ„Π°ΠΉΠ», Π° Π·Π°Ρ‚Π΅ΠΌ Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ количСство записанных Π±Π°ΠΉΡ‚ΠΎΠ²:

     Ρ„Π°ΠΉΠ» = ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ("example.txt", "w")
    num_bytes_writing = file.write("ΠŸΡ€ΠΈΠ²Π΅Ρ‚, PrepBytes!")
    print("ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ записанных Π±Π°ΠΉΡ‚ΠΎΠ²:", num_bytes_writing)
    file.close() 

    ОбъяснСниС: Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ сначала ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ "example.txt" Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ записи с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ open(). Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ write() для записи строки Β«Hello, PrepBytes!Β» Π² Ρ„Π°ΠΉΠ». Ѐункция write() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство Π±Π°ΠΉΡ‚ΠΎΠ², записанных Π² Ρ„Π°ΠΉΠ», ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ сохраняСм Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ num_bytes_writing. НаконСц, ΠΌΡ‹ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ num_bytes_write Π½Π° консоль.

    ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: Ссли Ρ„Π°ΠΉΠ» ΡƒΠΆΠ΅ сущСствуСт, функция write() ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ содСрТимоС Ρ„Π°ΠΉΠ»Π°. Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π°, Π° Π½Π΅ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈΡ…, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ добавлСния, ΠΏΠ΅Ρ€Π΅Π΄Π°Π² Ρ„Π»Π°Π³ Ρ€Π΅ΠΆΠΈΠΌΠ° Β«aΒ» Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ open() вмСсто Β«wΒ».

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ записи Π² Python

    Π’ΠΎΡ‚ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² использования Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ записи Π² Python:

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β€” 1 Π—Π°ΠΏΠΈΡΡŒ Π² тСкстовый Ρ„Π°ΠΉΠ»
    Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ записи Π² тСкстовый Ρ„Π°ΠΉΠ» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ записи Π² ΠΏΠΈΡ‚ΠΎΠ½Π΅

    РСализация ΠΊΠΎΠ΄Π°:

     Ρ„Π°ΠΉΠ» = ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ("example. txt", "w")
    file.write("ΠŸΡ€ΠΈΠ²Π΅Ρ‚, PrepBytes!")
    file.close() 

    ОбъяснСниС: Π’ этом ΠΊΠΎΠ΄Π΅ ΠΌΡ‹ сначала ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ Β«example.txtΒ» Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ записи с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ open(). Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ write() для Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ строку Β«Hello, PrepBytes!Β» Π² Ρ„Π°ΠΉΠ». НаконСц, ΠΌΡ‹ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Ρ„Π°ΠΉΠ» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ close(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π»ΡŽΠ±Ρ‹Π΅ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ записаны Π² Ρ„Π°ΠΉΠ» ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ – 2 Π—Π°ΠΏΠΈΡΡŒ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… строк Π² тСкстовый Ρ„Π°ΠΉΠ»
    Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ записи Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… строк Π² тСкстовый Ρ„Π°ΠΉΠ».

    РСализация ΠΊΠΎΠ΄Π°:

     = open("example.txt", "w")
    file.write("Π‘Ρ‚Ρ€ΠΎΠΊΠ° 1\n")
    file.write("Π‘Ρ‚Ρ€ΠΎΠΊΠ° 2\n")
    file.write("Π‘Ρ‚Ρ€ΠΎΠΊΠ° 3\n")
    file.close() 

    ОбъяснСниС: Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ сначала ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ "example.txt" Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ записи с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ open(). Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ write() нСсколько Ρ€Π°Π·, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ строку тСкста Π² Ρ„Π°ΠΉΠ», добавляя символ Π½ΠΎΠ²ΠΎΠΉ строки ("\n") Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки. НаконСц, ΠΌΡ‹ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Ρ„Π°ΠΉΠ» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ close().

    ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β€” 3 Π—Π°ΠΏΠΈΡΡŒ Π² Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»
    Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ записи Π² Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ записи Π² Python.

    РСализация ΠΊΠΎΠ΄Π°:

     # ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ записи
    Ρ„Π°ΠΉΠ» = ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ('example.bin', 'wb')
    # Π—Π°ΠΏΠΈΡΡŒ Π² Ρ„Π°ΠΉΠ»
    Ρ„Π°ΠΉΠ».Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ(b'\x41\x42\x43')
    # Π—Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°
    file.close() 

    ОбъяснСниС: Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ example.bin Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΉ записи, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ open() с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ° Β«wbΒ». Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ записываСм Π΄Π²ΠΎΠΈΡ‡Π½ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ b’\x41\x42\x43’ Π² Ρ„Π°ΠΉΠ» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ write(). Π­Ρ‚Π° двоичная ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ соотвСтствуСт символам ASCII A, B ΠΈ C. НаконСц, ΠΌΡ‹ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌ Ρ„Π°ΠΉΠ» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ close().

    ВрСмСнная ΠΈ пространствСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ записи Π² Python

    ВрСмСнная ΠΈ пространствСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ записи Π² Python ΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°Ρ€ΡŒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² зависимости ΠΎΡ‚ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€ записываСмых Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ‚ΠΈΠΏ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ устройства хранСния.

    Π’ ΠΎΠ±Ρ‰Π΅ΠΌ случаС врСмСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ write() Ρ€Π°Π²Π½Π° O(n), Π³Π΄Π΅ n β€” количСство записываСмых Π±Π°ΠΉΡ‚ΠΎΠ². Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ трСбуСтся большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ для записи Π±ΠΎΠ»ΡŒΡˆΠΈΡ… объСмов Π΄Π°Π½Π½Ρ‹Ρ…. ЀактичСскоС врСмя, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для записи Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΆΠ΅ зависит ΠΎΡ‚ скорости ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ устройства хранСния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ТСсткого диска ΠΈΠ»ΠΈ Ρ‚Π²Π΅Ρ€Π΄ΠΎΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ накопитСля).

    ОбъСмная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ write() Ρ€Π°Π²Π½Π° O(1), Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ объСм памяти, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ, являСтся постоянным, нСзависимо ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° записываСмых Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ функция write() Π½Π΅ сохраняСт Π΄Π°Π½Π½Ρ‹Π΅ Π² памяти; ΠΎΠ½ просто записываСт Π΅Π³ΠΎ нСпосрСдствСнно Π½Π° Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡŽΡ‰Π΅Π΅ устройство.

    Π‘Ρ‚ΠΎΠΈΡ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ функция write() ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы ΠΈΠ·-Π·Π° Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы ΠΈ дисковых ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ ΠΎΠ±Ρ‰ΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ пространствС. Однако эти Ρ„Π°ΠΊΡ‚ΠΎΡ€Ρ‹ Π² Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ стСпСни находятся Π²Π½Π΅ контроля ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python ΠΈ зависят ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ оборудования ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы.

    РСзюмС
    Π’ΠΎΡ‚ ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ рассмотрСли Π²Ρ‹ΡˆΠ΅:

    • Π’ Python Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Ρ„Π°ΠΉΠ», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ write() для Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.
    • ΠœΠ΅Ρ‚ΠΎΠ΄ write() ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° строку ΠΈ записываСт Π΅Π΅ Π² Ρ„Π°ΠΉΠ».
    • По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Π΅ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π°.
    • ВрСмСнная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ write() Ρ€Π°Π²Π½Π° O(n), Π³Π΄Π΅ n β€” количСство символов, записываСмых Π² Ρ„Π°ΠΉΠ».
    • ОбъСмная ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ write() Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π°Π²Π½Π° O(n), Π³Π΄Π΅ n β€” Ρ€Π°Π·ΠΌΠ΅Ρ€ Π΄Π°Π½Π½Ρ‹Ρ…, записываСмых Π² Ρ„Π°ΠΉΠ».
    • На Ρ„Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΈ ΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ write() ΠΌΠΎΠ³ΡƒΡ‚ Π²Π»ΠΈΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€Ρ‹, ΠΊΠ°ΠΊ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Π±Π°Π·ΠΎΠ²ΠΎΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы, Ρ€Π°Π·ΠΌΠ΅Ρ€ записываСмого Ρ„Π°ΠΉΠ»Π° ΠΈ объСм доступной памяти Π² систСмС.

    Часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ вопросы

    Π’ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ часто Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ вопросы, связанныС с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ записи Π² Python:

    Π’1: МоТно Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ записи для добавлСния Π΄Π°Π½Π½Ρ‹Ρ… Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ»?
    A: Π”Π°, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ записи ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для добавлСния Π΄Π°Π½Π½Ρ‹Ρ… Π² ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ», открывая Ρ„Π°ΠΉΠ» Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ «дополнСния» вмСсто Ρ€Π΅ΠΆΠΈΠΌΠ° «записи». Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, ΠΏΠ΅Ρ€Π΅Π΄Π°Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Β«aΒ» вмСсто Β«wΒ» ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ Ρ„Π°ΠΉΠ»Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Β«openΒ».

    Q2: Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ссли Ρ„Π°ΠΉΠ», Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСтся запись, Π½Π΅ сущСствуСт?
    A: Если Ρ„Π°ΠΉΠ», Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСтся запись, Π½Π΅ сущСствуСт, функция записи создаст Π½ΠΎΠ²Ρ‹ΠΉ Ρ„Π°ΠΉΠ» с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΈ Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ Π² Π½Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹Π΅.

    Q3: МоТно Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ записи для записи Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„Π°ΠΉΠ»?
    A: Π”Π°, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ записи ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для записи Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„Π°ΠΉΠ». Однако Π΄Π°Π½Π½Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Ρ‹ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π±Π°ΠΉΡ‚ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Β«Π±Π°ΠΉΡ‚Ρ‹Β», ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Ρ„Π°ΠΉΠ».

    Вопрос 4. Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚, Ссли Ρ„Π°ΠΉΠ», Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСтся запись, доступСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния ΠΈΠ»ΠΈ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ Π΄Ρ€ΡƒΠ³ΠΈΠΌ процСссом?
    A: Если Ρ„Π°ΠΉΠ», Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ выполняСтся запись, доступСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния ΠΈΠ»ΠΈ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½ Π΄Ρ€ΡƒΠ³ΠΈΠΌ процСссом, функция записи Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ "IOError" с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ сообщСниСм ΠΎΠ± ошибкС.