πŸπŸ“‹ F-строки Π² Python для интСрполяции ΠΈ форматирования строк

Из этой ΡΡ‚Π°Ρ‚ΡŒΠΈ Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ f-строки β€” инструмСнт для быстрой интСрполяции ΠΈ форматирования строк, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСвосходит ΠΏΠΎ эффСктивности ΠΈ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ классичСскиС ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° % ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° .format().

Данная ΡΡ‚Π°Ρ‚ΡŒΡ являСтся ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠΌ. Бсылка Π½Π° ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π».

К ΠΊΠΎΠ½Ρ†Ρƒ этого руководства Π²Ρ‹ ΠΏΠΎΠΉΠΌΠ΅Ρ‚Π΅, ΠΏΠΎΡ‡Π΅ΠΌΡƒ f-строки – это ΠΌΠΎΡ‰Π½Ρ‹ΠΉ инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ²Π»Π°Π΄Π΅Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ Π½Π° Python.

Π’ этом самоучитСлС Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ:

  • Π˜Π½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ значСния, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ выраТСния Π² строки с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ f-строк
  • Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ f-строки с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΈΠ½ΠΈ-языка форматирования строк Python
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΠΎΠ²Ρ‹Π΅ особСнности f-строк Π² Python 3.12 ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… вСрсиях
  • ВыяснитС, ΠΊΠΎΠ³Π΄Π° слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ классичСскиС срСдства интСрполяции вмСсто f-строк

Для извлСчСния максимальной ΠΏΠΎΠ»ΡŒΠ·Ρ‹ ΠΎΡ‚ этого руководства, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ… строк Python. Π’Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠΏΡ‹Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ инструмСнтами интСрполяции строк, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ modulo (%) ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ .format().

Π˜Π½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΡΡ†ΠΈΡ ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ строк Π΄ΠΎ Python 3.6

Π”ΠΎ появлСния Python 3.6 Ρƒ вас Π±Ρ‹Π»ΠΎ Π΄Π²Π° основных инструмСнта для интСрполяции Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π²Π½ΡƒΡ‚Ρ€ΠΈ строковых Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ²:

  1. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ строковой интСрполяции (%) ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ модуляции
  2. ΠœΠ΅Ρ‚ΠΎΠ΄ str.format()

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… ΠΌΡ‹ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ рассмотрим эти Π΄Π²Π° инструмСнта строковой интСрполяции. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ ΠΎ возмоТностях форматирования строк Python, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ эти инструмСнты ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ модуляции (%)

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ modulo (%) Π±Ρ‹Π» ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ инструмСнтом интСрполяции ΠΈ форматирования строк Π² Python ΠΈ использовался Π² языкС с самого Π½Π°Ρ‡Π°Π»Π°. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ выглядит использованиС этого ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅:

>>> name = "Jane"

>>> "Hello, %s!" % name
'Hello, Jane!'

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ % ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для интСрполяции значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ name Π² строковый Π»ΠΈΡ‚Π΅Ρ€Π°Π». ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ интСрполяции ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°:

  1. Π‘Ρ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹ΠΉ Π»ΠΈΡ‚Π΅Ρ€Π°Π», содСрТащий ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько спСцификаторов прСобразования
  2. ΠžΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² строковый Π»ΠΈΡ‚Π΅Ρ€Π°Π»

Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ прСобразования Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΊΠ°ΠΊ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ Π·Π°ΠΌΠ΅Π½Ρ‹. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π² качСствС спСцификатора прСобразования ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ комбинация %-символов. Π‘ΠΈΠΌΠ²ΠΎΠ» % ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Π½Π°Ρ‡Π°Π»ΠΎ спСцификатора, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π±ΡƒΠΊΠ²Π° s являСтся Ρ‚ΠΈΠΏΠΎΠΌ прСобразования ΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π² строку.

Если Π² Ρ†Π΅Π»Π΅Π²ΡƒΡŽ строку Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ количСство ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ количСству спСцификаторов Π² строкС:

>>> name = "Jane"
>>> age = 25

>>> "Hello, %s! You're %s years old." % (name, age)
'Hello, Jane! You're 25 years old.'

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π² качСствС ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° % ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ со значСниями. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ использовали строку ΠΈ Ρ†Π΅Π»ΠΎΠ΅ число. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ %-спСцификатор, Python ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ ΠΎΠ±Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² строки.

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

>>> "Hello, %(name)s! You're %(age)s years old." % {"name": "Jane", "age": 25}
"Hello, Jane! You're 25 years old."

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

ΠŸΡ€ΠΈ использовании ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° % для интСрполяции строк Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ спСцификаторы прСобразования. Они ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ возмоТности форматирования строк, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚ΠΈΠΏΡ‹ прСобразования, Ρ„Π»Π°Π³ΠΈ прСобразования ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ символы, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Ρ‚ΠΎΡ‡ΠΊΠ° . ΠΈ Π·Π²Π΅Π·Π΄ΠΎΡ‡ΠΊΠ° *. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

>>> "Balance: $%.2f" % 5425.9292
'Balance: $5425.93'

>>> print("Name: %s\nAge: %5s" % ("John", 35))
Name: John
Age:    35

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ спСцификатор прСобразования %.2f для выраТСния Π²Π°Π»ΡŽΡ‚Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π‘ΡƒΠΊΠ²Π° f ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ Π½Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² число с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ. Π§Π°ΡΡ‚ΡŒ .2 опрСдСляСт Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ ΠΏΡ€ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ %5s, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Ρ€ΠΎΠ²Π½ΡΡ‚ΡŒ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ возраста Π½Π° ΠΏΡΡ‚ΡŒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ Π²ΠΏΡ€Π°Π²ΠΎ.

πŸ’‘ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅
Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° modulo Π²Π΄ΠΎΡ…Π½ΠΎΠ²Π»Π΅Π½ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ printf(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² C ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… языках программирования.

НСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ %-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ обСспСчиваСт быстрый способ интСрполяции ΠΈ форматирования строк, ΠΎΠ½ ΠΈΠΌΠ΅Π΅Ρ‚ ряд ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, приводящих ΠΊ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌ ошибкам. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, слоТно ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠΈ Π² строках:

>>> "The personal info is: %s" % ("John", 35)
Traceback (most recent call last):
    ...
TypeError: not all arguments converted during string formatting

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Π΅Π³ΠΎ Π² качСствС Π΄Π²ΡƒΡ… ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π­Ρ‚Ρƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, Π·Π°Π²Π΅Ρ€Π½ΡƒΠ² Π΄Π°Π½Π½Ρ‹Π΅ Π² одноэлСмСнтный ΠΊΠΎΡ€Ρ‚Π΅ΠΆ:

>>> "The personal info is: %s" % (("John", 35),)
"The personal info is: ('John', 35)"

Π”Π°Π½Π½Ρ‹ΠΉ синтаксис устраняСт ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ваша строка ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΊΠΎΡ€Ρ‚Π΅ΠΆ Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ синтаксис Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΏΡ€ΠΎΡ‡Π΅ΡΡ‚ΡŒ, ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΈ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, ΠΏΡ€Π°Π²Π΄Π°?

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ %-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΅Π³ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Π΅ возмоТности форматирования ΠΈ отсутствиС ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΌΠΈΠ½ΠΈ-языка форматирования строк Python, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ считаСтся ΠΌΠΎΡ‰Π½Ρ‹ΠΌ инструмСнтом для форматирования строк.

🐍 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° питониста
Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° питониста»
πŸπŸŽ“ Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° собСса ΠΏΠΎ Python
ΠŸΠΎΠ΄Ρ‚ΡΠ½ΡƒΡ‚ΡŒ свои знания ΠΏΠΎ Python Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° собСса ΠΏΠΎ PythonΒ»
🧩🐍 Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ Python
Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Ρ‹Π΅ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΏΠΎ Python для ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π·Π°Π΄Π°Ρ‡ ΠΏΠΎ PythonΒ»

ΠœΠ΅Ρ‚ΠΎΠ΄ str.format()

ΠœΠ΅Ρ‚ΠΎΠ΄ str.format() Π±ΠΎΠ»Π΅Π΅ эффСктивСн ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с %-ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ исправляСт ряд ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΌΠΈΠ½ΠΈ-язык форматирования строк. ΠŸΡ€ΠΈ использовании .format() Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки Ρ€Π°Π·Π³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ Π·Π°ΠΌΠ΅Π½Ρ‹:

>>> name = "Jane"
>>> age = 25

>>> "Hello, {}! You're {} years old.".format(name, age)
"Hello, Jane! You're 25 years old."

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° .format() Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ Π·Π°ΠΌΠ΅Π½Ρ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ пустыС скобки, Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ свои Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² Ρ†Π΅Π»Π΅Π²ΡƒΡŽ строку исходя ΠΈΠ· ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ порядок интСрполяции Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, ΡΡΡ‹Π»Π°ΡΡΡŒ Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Π² .format() с использованиСм Π½ΡƒΠ»Π΅Π²Ρ‹Ρ… индСксов. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄ ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² .format() Π² Ρ†Π΅Π»Π΅Π²ΠΎΠΉ строкС:

>>> "Hello, {1}! You're {0} years old.".format(age, name)
"Hello, Jane! You're 25 years old."

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ числовыС индСксы для Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ опрСдСлСния порядка интСрполяции Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² .format().

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ с ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌΠΈ словами ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ названия Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ Π·Π°ΠΌΠ΅Π½Ρ‹:

>>> "Hello, {name}! You're {age} years old.".format(name="Jane", age=25)
"Hello, Jane! You're 25 years old."

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ продСмонстрировано ΠΊΠ°ΠΊ .format() ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов ΠΏΠΎ ΠΈΡ… ΠΈΠΌΠ΅Π½Π°ΠΌ Π² Ρ†Π΅Π»Π΅Π²ΡƒΡŽ строку. Π­Ρ‚Π° конструкция Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ с использованиСм ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° %.

И Π½Π°ΠΊΠΎΠ½Π΅Ρ†, ΠΌΠ΅Ρ‚ΠΎΠ΄ .format() позволяСт Π²Π°ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ словари для прСдоставлСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² строку:

>>> person = {"name": "Jane", "age": 25}

>>> "Hello, {name}! You're {age} years old.".format(**person)
"Hello, Jane! You're 25 years old."

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ содСрТит Π΄Π°Π½Π½Ρ‹Π΅ для интСрполяции. Π—Π°Ρ‚Π΅ΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° распаковки словаря **, ΠΌΡ‹ Π·Π°Π΄Π°Π΅ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ для ΠΌΠ΅Ρ‚ΠΎΠ΄Π° .format().

ΠœΠ΅Ρ‚ΠΎΠ΄ .format() ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ спСцификаторы Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°. Π­Ρ‚ΠΎ строки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ вставляСтС Π² ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ Π·Π°ΠΌΠ΅Π½Ρ‹ для форматирования ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

>>> "Balance: ${:.2f}".format(5425.9292)
'Balance: $5425.93'

>>> "{:=^30}".format("Centered string")
'=======Centered string========'

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ спСцификатор Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° :.2f. Π­Ρ‚ΠΎΡ‚ спСцификатор Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ .format() ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊ число с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ с Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ Π΄ΠΎ Π΄Π²ΡƒΡ…. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Π²Π°Π»ΡŽΡ‚Π½Ρ‹Π΅ значСния.

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ спСцификатор Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° :=^30. Π’ этом случаС Π²Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ .format() ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ символ = Π² качСствС Π·Π°ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π΅Π³ΠΎ символа. Π‘ΠΈΠΌΠ²ΠΎΠ» ^ Ρ†Π΅Π½Ρ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, вставляя символы = с ΠΎΠ±Π΅ΠΈΡ… сторон для достиТСния Ρ‚Ρ€ΠΈΠ΄Ρ†Π°Ρ‚ΠΈ Π·Π½Π°ΠΊΠΎΠ².

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

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… написано Π΅Ρ‰Π΅ ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… форматирования строк ΠΏΡ€ΠΈ использовании ΠΌΠΈΠ½ΠΈ-языка с f-строками.

Π˜Π½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΡΡ†ΠΈΡ строк с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ F-строк Π² Python

F-строки появились Π² Python 3.6 Π² PEP 498. Π’Π°ΠΊΠΆΠ΅ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ строковыми Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°ΠΌΠΈ, f-строки – это строковыС Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉΡΡ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΎΠΉ стоит символ f. Они ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² сСбя выраТСния Python, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки. Python Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ эти выраТСния Π½Π° ΠΈΡ‚ΠΎΠ³ΠΎΠ²Ρ‹Π΅ значСния. Из этого слСдуСт, Ρ‡Ρ‚ΠΎ f-строки ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ Π² инструмСнт интСрполяции строк.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ ΠΎ f-строках ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ ΠΈΡ… ΠΏΡ€ΠΈ интСрполяции Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² строковых Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°Ρ….

Π˜Π½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΡΡ†ΠΈΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² F-строках

F-строки Π΄Π΅Π»Π°ΡŽΡ‚ процСсс интСрполяции строк ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ, быстрым ΠΈ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹ΠΌ. Бинтаксис Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² .format(), Π½ΠΎ ΠΎΠ½ ΠΌΠ΅Π½Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π΅Π½. Π’Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ лишь Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ строковый Π»ΠΈΡ‚Π΅Ρ€Π°Π» со строчной ΠΈΠ»ΠΈ прописной Π±ΡƒΠΊΠ²Ρ‹ f, Π° Π·Π°Ρ‚Π΅ΠΌ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ значСния, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ»ΠΈ выраТСния Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… мСстах:

>>> name = "Jane"
>>> age = 25

>>> f"Hello, {name}! You're {age} years old."
'Hello, Jane! You're 25 years old.'

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅, насколько Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠΉ ΠΈ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½ΠΎΠΉ стала ваша строка послС использования синтаксиса f-строки. Π’Π°ΠΌ большС Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹. Π’Ρ‹ просто вставляСтС Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ»ΠΈ выраТСния Π² строковый Π»ΠΈΡ‚Π΅Ρ€Π°Π», ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки.

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

Вставка Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² F-строки

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ любоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Python ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² f-строку. Π­Ρ‚ΠΎ позволяСт Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ интСрСсныС Π²Π΅Ρ‰ΠΈ. МоТно ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ довольно простоС, ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

>>> f"{2 * 21}"
'42'

Когда Python запускаСт эту f-строку, ΠΎΠ½ ΡƒΠΌΠ½ΠΎΠΆΠ°Π΅Ρ‚ 2 Π½Π° 21 ΠΈ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΡƒΡŽ строку.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹ΡˆΠ΅ – довольно прост. Однако f-строки ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ Π±ΠΎΠ»Π΅Π΅ ΡˆΠΈΡ€ΠΎΠΊΠΈΠΌΠΈ возмоТностями. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ выраТСния Python, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², ΠΈ Π΄Π°ΠΆΠ΅ комплСксныС выраТСния ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π±ΠΎΠ»Π΅Π΅ слоТныС выраТСния:

>>> name = "Jane"
>>> age = 25

>>> f"Hello, {name.upper()}! You're {age} years old."
"Hello, JANE! You're 25 years old."

>>> f"{[2**n for n in range(3, 9)]}"
'[8, 16, 32, 64, 128, 256]'

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ f-строкС Π² ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ Π·Π°ΠΌΠ΅Π½Ρ‹ Π²Ρ‹ вставляСтС Π²Ρ‹Π·ΠΎΠ² ΠΌΠ΅Ρ‚ΠΎΠ΄Π° .upper(). Python Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΈ вставляСт Π² ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΡƒΡŽ строку имя Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ рСгистрС. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ создаСтС f-строку, Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ вставляСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ распознавания списка. Он создаСт Π½ΠΎΠ²Ρ‹ΠΉ список, состоящий ΠΈΠ· Π΄Π²ΡƒΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ строк с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ F-строки Python

ВыраТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ вставляСтС Π² f-строку, ΠΎΡ†Π΅Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π—Π°Ρ‚Π΅ΠΌ Python Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° .__format__(). Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» форматирования строк. Π­Ρ‚ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Π»Π΅ΠΆΠΈΡ‚ Π² основС ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° .format(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΡƒΠΆΠ΅ встрСчали, Ρ‚Π°ΠΊ ΠΈ встроСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ format():

>>> format(5425.9292, ".2f")
'5425.93'

Π’ качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² функция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ спСцификатор Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°. Π—Π°Ρ‚Π΅ΠΌ ΠΎΠ½Π° примСняСт спСцификатор ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌ ΠΌΠΈΠ½ΠΈ-языка форматирования строк.

Как ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ .format(), f-строки ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΌΠΈΠ½ΠΈ-язык форматирования строк. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² f-строках Π²Ρ‹ Ρ‚ΠΎΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ спСцификаторы Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°:

>>> balance = 5425.9292

>>> f"Balance: ${balance:.2f}"
'Balance: $5425.93'

>>> heading = "Centered string"
>>> f"{heading:=^30}"
'=======Centered string========'

Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ спСцификаторы Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π² этих ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ использовались Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ .format(). Π’ этом случаС Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ находится ΠΏΠ΅Ρ€Π΅Π΄ спСцификатором Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ всСгда начинаСтся с двоСточия. Π­Ρ‚ΠΎΡ‚ синтаксис Π΄Π΅Π»Π°Π΅Ρ‚ строковыС Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΈ Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹ΠΌΠΈ.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ самыС Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Π΅ спСцификаторы Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°. РаспространСнныС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя Π²Π°Π»ΡŽΡ‚Ρ‹, Π΄Π°Ρ‚Ρ‹ ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ числовых Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ форматирования строк:

>>> integer = -1234567
>>> f"Comma as thousand separators: {integer:,}"
'Comma as thousand separators: -1,234,567'

>>> sep = "_"
>>> f"User's thousand separators: {integer:{sep}}"
'User's thousand separators: -1_234_567'

>>> floating_point = 1234567.9876
>>> f"Comma as thousand separators and two decimals: {floating_point:,.2f}"
'Comma as thousand separators and two decimals: 1,234,567.99'

>>> date = (9, 6, 2023)
>>> f"Date: {date[0]:02}-{date[1]:02}-{date[2]}"
'Date: 09-06-2023'

>>> from datetime import datetime
>>> date = datetime(2023, 9, 26)
>>> f"Date: {date:%m/%d/%Y}"
'Date: 09/26/2023'

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

Π”Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π°ΠΆΠ½Ρ‹Π΅ особСнности F-строк

На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ f-строки ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ быстрый ΠΈ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ для чтСния способ интСрполяции Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² строковыС Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹. Они Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΌΠΈΠ½ΠΈ-язык форматирования строк, Ρ‡Ρ‚ΠΎ позволяСт ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ спСцификаторы Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° для форматирования ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² строки.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… Π²Ρ‹ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚Π΅ΡΡŒ с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ возмоТностями f-строк, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ Π² повсСднСвной Ρ€Π°Π±ΠΎΡ‚Π΅.

ИспользованиС строковых Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π² F-строках

F-строки Π² Python ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ Π΄Π²Π° Ρ„Π»Π°Π³Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ особоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² процСссС интСрполяции. Π­Ρ‚ΠΈ Ρ„Π»Π°Π³ΠΈ тСсно связаны с Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ Python управляСт строковым Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π­Ρ‚ΠΈΠΌΠΈ Ρ„Π»Π°Π³Π°ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ:

Ѐлаг ОписаниС
!s Π˜Π½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ строковоС прСдставлСниС ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° .__str__()
!r Π˜Π½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ прСдставлСниС строки ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄Π° .__repr__()

Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ .__str__() ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ прСдоставляСт ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ΅ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ строковоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ .__repr__() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ΅ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ этих ΠΏΠΎΠ΄Ρ€ΡƒΡ‡Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ класс:

# person.py

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return f"I'm {self.name}, and I'm {self.age} years old."

    def __repr__(self):
        return f"{type(self).__name__}(name='{self.name}', age={self.age})"

Π­Ρ‚ΠΎΡ‚ класс содСрТит Π΄Π²Π° Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° – .name ΠΈ .age. ΠœΠ΅Ρ‚ΠΎΠ΄ .__str__() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строку, ΡΠΎΡΡ‚ΠΎΡΡ‰ΡƒΡŽ ΠΈΠ· ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ сообщСния для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ этого класса. Π­Ρ‚ΠΎ сообщСниС Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ скорСС для ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»Π΅ΠΉ, Ρ‡Π΅ΠΌ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ².

ΠœΠ΅Ρ‚ΠΎΠ΄ .__repr__() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ строку Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Ρ‡Ρ‚ΠΎ Π±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°. ΠŸΡ€ΠΎΡ‰Π΅ говоря, это Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ сообщаСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ, ΠΊΠ°ΠΊ Π±Ρ‹Π» создан Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Π’ ΠΈΠ΄Π΅Π°Π»Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ это строковоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.

Как эти рассуТдСния ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ строк Π²Π»ΠΈΡΡŽΡ‚ Π½Π° f-строки? ΠŸΡ€ΠΈ создании f-строк Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠ΅ строковоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„Π»Π°Π³ΠΎΠ² !r ΠΈ !s:

>>> from person import Person

>>> jane = Person("Jane Doe", 25)

>>> f"{jane!s}"
"I'm Jane Doe, and I'm 25 years old."

>>> f"{jane!r}"
"Person(name='Jane Doe', age=25)"

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ f-строкС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„Π»Π°Π³Π° !s интСрполируСтся строковоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ .__str__(). Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ f-строкС Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Ρ„Π»Π°Π³ !r для интСрполяции ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° строкового выраТСния вашСго Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

Π­Ρ‚ΠΈ Π΄Π²Π° Ρ„Π»Π°Π³Π° ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Ρ‹ для вас ΠΊΠ°ΠΊ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° Python. Π’ зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Π½Π° ΠΊΠ°ΠΊΡƒΡŽ Π°ΡƒΠ΄ΠΈΡ‚ΠΎΡ€ΠΈΡŽ рассчитан ваш ΠΊΠΎΠ΄, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· Π½ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π’ основном это Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΡ‚ Ρ„Π»Π°Π³, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ приносит большС ΠΏΠΎΠ»ΡŒΠ·Ρ‹ вашим ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌ.

Π’Π°ΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ % Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ эквивалСнтныС Ρ‚ΠΈΠΏΡ‹ прСобразования s ΠΈ r, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ Ρ„Π»Π°Π³ΠΈ !s ΠΈ !r Π² f-строках.

Π‘Π°ΠΌΠΎΠ΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ΡΡ выраТСния для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ

F-строки ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎΠΉ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ, которая ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ, особСнно Π² процСссС ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ. Π­Ρ‚Π° функция позволяСт ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ выраТСния. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π²Ρ‹ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°Π΅Ρ‚Π΅ΡΡŒ с нСбольшой ошибкой ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΎΠΉ Π² ΠΊΠΎΠ΄Π΅ ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ·Π½Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ выполнСния ΠΊΠΎΠ΄Π°.

Для быстрой ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ print(), ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½ΠΈΠΆΠ΅:

>>> variable = "Some mysterious value"

>>> print(f"{variable = }")
variable = 'Some mysterious value'

Для создания самодокумСнтированного выраТСния Π² f-строкС Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт Π·Π½Π°ΠΊ равСнства =. Когда Python выполняСт f-строку, ΠΎΠ½ выстраиваСт строковоС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, содСрТащСС имя ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π·Π½Π°ΠΊ равСнства ΠΈ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π­Ρ‚Π° функция f-строки ΠΏΠΎΠ»Π΅Π·Π½Π° для быстрых ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ Π² вашСм ΠΊΠΎΠ΄Π΅.

Π£Ρ‡Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ Π²ΠΎΠΊΡ€ΡƒΠ³ Π·Π½Π°ΠΊΠ° равСнства Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹, Π½ΠΎ ΠΎΠ½ΠΈ ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅:

>>> print(f"{variable=}")
variable='Some mysterious value'

>>> print(f"{variable= }")
variable= 'Some mysterious value'

>>> print(f"{variable =}")
variable ='Some mysterious value'

Π₯отя символы ΠΏΡ€ΠΎΠ±Π΅Π»Π° Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ΠΈ ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ.

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ: F-строки ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с классичСскими инструмСнтами

F-строки Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ быстрСС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° modulo (%) ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° .format(). Π­Ρ‚ΠΎ Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ свойство. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ скриптС, ΠΏΡ€ΠΈ использовании модуля timeit, измСряСтся врСмя выполнСния, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ для построСния строки с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° modulo, ΠΌΠ΅Ρ‚ΠΎΠ΄Π° .format() ΠΈ f-строки:

# performance.py

import timeit

name = "Linda Smith"
age = 40
strings = {
    "Modulo operator": "'Name: %s Age: %s' % (name, age)",
    ".format() method": "'Name: {} Age: {}'.format(name, age)",
    "f_string": "f'Name: {name} Age: {age}'",
}

def run_performance_test(strings):
    max_length = len(max(strings, key=len))
    for tool, string in strings.items():
        time = timeit.timeit(
            string,
            number=1000000,
            globals=globals()
        ) * 1000
        print(f"{tool}: {time:>{max_length - len(tool) + 6}.2f} ms")

run_performance_test(strings)

Π’ этом скриптС функция run_performance_test() занимаСтся ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния Ρ‚Ρ€Π΅Ρ… Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… инструмСнтов интСрполяции строк. Ѐункция timeit.timeit() Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π° for запускаСт ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ инструмСнт интСрполяции ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ Ρ€Π°Π· ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΠ±Ρ‰Π΅Π΅ врСмя выполнСния.

Π—Π°Ρ‚Π΅ΠΌ функция Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π° экран. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΊΠ°ΠΊ Π² строкС f ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ print() ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ спСцификаторы Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° для ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ оформлСния Π²Ρ‹Π²ΠΎΠ΄Π° ΠΊΠΎΠ΄Π°.

Если Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ скрипт ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, Ρ‚ΠΎ Π½Π° экранС появится Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΏΠΎΡ…ΠΎΠΆΠΈΠΉ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ρ†ΠΈΡ„Ρ€Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ:

$ python performance.py
Modulo operator:   90.98 ms
.format() method: 144.69 ms
f_string:          87.08 ms

Π”Π°Π½Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ f-строки Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ быстрСС, Ρ‡Π΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ % ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ .format(), послСдний ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… являСтся самым ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌ инструмСнтом ΠΈΠ·-Π·Π° Π²Ρ‹Π·ΠΎΠ²Π° всСх Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, f-строки Ρ‡ΠΈΡ‚Π°Π±Π΅Π»ΡŒΠ½Ρ‹, Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π½Ρ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ быстры.

ΠœΠΎΠ΄Π΅Ρ€Π½ΠΈΠ·Π°Ρ†ΠΈΡ F-строк: Python 3.12 ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ вСрсии

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΡƒΠ·Π½Π°Π»ΠΈ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ f-строки ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌ инструмСнтом, Π²Π°ΠΌ, вСроятно, Π½Π΅ тСрпится Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² своСм ΠΊΠΎΠ΄Π΅. Однако Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ f-строки Π΄ΠΎ вСрсии Python 3.11 ΠΈΠΌΠ΅ΡŽΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ограничСния, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки, ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π΄Π΅Ρ‚Π°Π»ΠΈ.

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Python 3.12 снял эти ограничСния, ΡƒΠ΄Π°Π»ΠΈΠ² старый парсСр ΠΈ прСдоставив Π½ΠΎΠ²ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ f-строк, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π½Π° парсСрС PEG ΠΈΠ· Python 3.9. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ ΠΎΠ± этих ограничСниях ΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Python 3.12 ΠΈΡ… устранил.

ИспользованиС ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ

Python ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ нСсколько Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ Π² качСствС Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ строковых Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ². Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ' ΠΈ Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ "". Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Ρ€ΠΎΠΉΠ½Ρ‹Π΅ ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ''' ΠΈ Ρ‚Ρ€ΠΎΠΉΠ½Ρ‹Π΅ Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ """. ВсС эти строковыС Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΈ для f-строк. Π­Ρ‚Π° функция позволяСт Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ Π² f-строки. Она Ρ‚Π°ΠΊΠΆΠ΅ позволяСт Π²Π½ΠΎΡΠΈΡ‚ΡŒ строковыС Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ Π²ΠΎ встроСнныС выраТСния ΠΈ Π΄Π°ΠΆΠ΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ f-строки.

Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΌ случаСм использования Ρ€Π°Π·Π½Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ Π² f-строкС являСтся Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ использования апострофа ΠΈΠ»ΠΈ обращСния ΠΊ ΠΊΠ»ΡŽΡ‡Ρƒ словаря Π²ΠΎ встроСнном Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ:

>>> person = {"name": "Jane", "age": 25}

>>> f"Hello, {person['name']}! You're {person['age']} years old."
"Hello, Jane! You're 25 years old."

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ имССтся ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΎ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ΅. Для опрСдСлСния f-строки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ. Для доступа ΠΊ ΠΊΠ»ΡŽΡ‡Ρƒ словаря ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ. Π’ сокращСнии "You're" одинарная ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² качСствС апострофа.

Π˜Ρ‚Π°ΠΊ, Π³Π΄Π΅ ΠΆΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° использованиС ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ Π² f-строках Π΄ΠΎ вСрсии Python 3.11? ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² f-строкС нСльзя ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ:

>>> f"Hello, {person["name"]}!"
  File "<input>", line 1
    f"Hello, {person["name"]}!"
                      ^^^^
SyntaxError: f-string: unmatched '['

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ… ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ для доступа ΠΊ ΠΊΠ»ΡŽΡ‡Ρƒ словаря f-строка Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΈ Python Π²Ρ‹Π΄Π°Π΅Ρ‚ ΡΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ.

К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Π½ΠΎΠ²Ρ‹Π΅ f-строки Π² Python 3.12 Ρ€Π΅ΡˆΠΈΠ»ΠΈ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ² ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ:

>>> # Python 3.12

>>> person = {"name": "Jane", "age": 25}
>>> f"Hello, {person["name"]}!"
'Hello, Jane!'

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

БущСствуСт Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ f-строки, тСсно связанноС с ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°ΠΌΠΈ. Π’ Python ΠΌΠΎΠΆΠ½ΠΎ Π²Π»ΠΎΠΆΠΈΡ‚ΡŒ Ρ€ΠΎΠ²Π½ΠΎ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ f-строк, сколько сущСствуСт Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ:

>>> f"""{
...     f'''{
...         f"{f'{42}'}"
...     }'''
... }"""
'42'

>>> f"""{
...     f'''{
...         f"{f'{f"{42}"}'}"
...     }'''
... }"""
  File "<stdin>", line 1
    (f"{f'{f"{42}"}'}")
             ^
SyntaxError: f-string: f-string: unterminated string

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ влоТСнности Π² f-строкС Π΄ΠΎ вСрсии Python 3.11 ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ доступными раздСлитСлями строк, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ", ', "" ΠΈ '''. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρƒ вас Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ раздСлитСля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для разграничСния ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ влоТСнности.

Π’ Python 3.12 это ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ снято, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ:

>>> # Python 3.12

>>> f"{
...     f"{
...         f"{
...             f"{
...                 f"{
...                     f"Deeply nested f-string!"
...                 }"
...             }"
...         }"
...     }"
... }"
'Deeply nested f-string!'

Π”ΠΎ появлСния Π½ΠΎΠ²ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ f-строк Π½Π΅ сущСствовало Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ограничСния Π½Π° количСство ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ влоТСнности. Однако Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ нСльзя Π±Ρ‹Π»ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ строковыС ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π» СстСствСнноС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° допустимыС ΡƒΡ€ΠΎΠ²Π½ΠΈ влоТСнности Π² Π»ΠΈΡ‚Π΅Ρ€Π°Π»Ρ‹ f-строк. Начиная с Python 3.12, ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ, поэтому ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡ‚ΡŒ f-строк Π½Π΅ сущСствуСт.

ИспользованиС ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… косых Ρ‡Π΅Ρ€Ρ‚ΠΎΡ‡Π΅ΠΊ

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΈΠΌ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ f-строк Π΄ΠΎ вСрсии 3.12 являСтся Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования символов ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ косой Ρ‡Π΅Ρ€Ρ‚Ρ‹ Π²ΠΎ встроСнных выраТСниях. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ строки с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ символа ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ \n:

>>> words = ["Hello", "World!", "I", "am", "a", "Pythonista!"]

>>> f"{'\n'.join(words)}"
  File "<input>", line 1
    f"{'\n'.join(words)}"
                        ^
SyntaxError: f-string expression part cannot include a backslash

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ синтаксичСская ошибка, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ f-строки Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ символов ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ косой Ρ‡Π΅Ρ€Ρ‚Ρ‹ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹ΠΌΠΈ скобками.

ΠžΠΏΡΡ‚ΡŒ-Ρ‚Π°ΠΊΠΈ, новая рСализация f-строк, появившаяся с Python 3.12, Ρ€Π΅ΡˆΠ°Π΅Ρ‚ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ:

>>> # Python 3.12

>>> words = ["Hello", "World!", "I", "am", "a", "Pythonista!"]

>>> f"{'\n'.join(words)}"
'Hello\nWorld!\nI\nam\na\nPythonista!'

>>> print(f"{'\n'.join(words)}")
Hello
World!
I
am
a
Pythonista!

Π’ Π½ΠΎΠ²ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ f-строк снято ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° использованиС символов ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ косой Ρ‡Π΅Ρ€Ρ‚Ρ‹ Π²ΠΎ встроСнных выраТСниях, поэтому Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π² f-строках ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

НаписаниС встроСнных ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠ΅Π²

F-строки Π΄ΠΎ вСрсии Python 3.11 Π½Π΅ позволяли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ символ # Π²ΠΎ встроСнных выраТСниях. Из-Π·Π° этого нСльзя Π±Ρ‹Π»ΠΎ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ Π²ΠΎ встроСнныС выраТСния. Если ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π°Π½Π° синтаксичСская ошибка:

>>> employee = {
...     "name": "John Doe",
...     "age": 35,
...     "job": "Python Developer",
... }

>>> f"""Storing employee's data: {
...     employee['name'].upper()  # Always uppercase name before storing
... }"""
  File "<stdin>", line 3
    }"""
        ^
SyntaxError: f-string expression part cannot include '#'

Когда Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ # для Π²Π²ΠΎΠ΄Π° коммСнтария Π² f-строку, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ ΡΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Π² Π½ΠΎΠ²Ρ‹Ρ… f-строках Python 3.12 эта ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ‚Π°ΠΊΠΆΠ΅ устранСна:

>>> # Python 3.12

>>> employee = {
...     "name": "John Doe",
...     "age": 35,
...     "job": "Python Developer",
... }

>>> f"Storing employee's data: {
...     employee["name"].upper()  # Always uppercase name before storing
... }"
"Storing employee's data: JOHN DOE"

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ встроСнныС ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, Ссли Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΡƒΡ‚ΠΎΡ‡Π½ΠΈΡ‚ΡŒ Π² выраТСниях f-строки. Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΈΠΌ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ΠΌ являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Ρ€Π°Π·Ρ€Ρ‹Π²Ρ‹ строк Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ это ΠΌΠΎΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобок Π² f-строках. Для этого Π΄Π°ΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠ»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Π΅ строки с Ρ‚Ρ€ΠΎΠΉΠ½Ρ‹ΠΌΠΈ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°ΠΌΠΈ.

Π Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠ° сообщСний ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… F-строк

Новый синтаксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ PEG Π² Python ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡƒΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡΠΌ Π² языкС. Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ, ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Ρ†Π΅Π½Π½Ρ‹Ρ… ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠΉ являСтся появлСниС Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½Ρ‹Ρ… сообщСний ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…. Π”ΠΎ вСрсии Python 3.11 эти Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ… Π½Π΅ Π±Ρ‹Π»ΠΈ доступны для f-строк, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ΠΈ Π½Π΅ использовали синтаксичСский Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ PEG. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…, связанных с f-строками, Π±Ρ‹Π»ΠΈ ΠΌΠ΅Π½Π΅Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌΠΈ ΠΈ понятными.

Π’ Python 3.12 появилась Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΠΈ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ сравниваСтся сообщСниС ΠΎΠ± ошибкС для Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ f-строки Π² вСрсиях 3.11 ΠΈ 3.12:

>>> # Python 3.11
>>> f"{42 + }"
  File "<stdin>", line 1
    (42 + )
          ^
SyntaxError: f-string: invalid syntax

>>> # Python 3.12
>>> f"{42 + }"
  File "<stdin>", line 1
    f"{42 + }"
          ^
SyntaxError: f-string: expecting '=', or '!', or ':', or '}'

Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΠ± ошибкС Π² ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ носит ΠΎΠ±Ρ‰ΠΈΠΉ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ ΠΈ Π½Π΅ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ‚ΠΎΡ‡Π½ΠΎΠ΅ мСсто ошибки Π² строкС. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ Π² ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки, Ρ‡Ρ‚ΠΎ создаСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² исходном ΠΊΠΎΠ΄Π΅ ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚.

Π’ Python 3.12 сообщСниС ΠΎΠ± ошибкС Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ΅. Оно сигнализируСт ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎΠΌ мСстС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π² Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚ΠΎΠΉ строкС. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, сообщСниС ΠΎΠ± ошибкС содСрТит Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ прСдлоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ.

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

ИспользованиС классичСских срСдств форматирования строк вмСсто F-строк

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ f-строки ΡΠ²Π»ΡΡŽΡ‚ΡΡ довольно интСрСсной ΠΈ популярной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Python, ΠΎΠ½ΠΈ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠΌ. Иногда ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ modulo (%) ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ .format() ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ Π»ΡƒΡ‡ΡˆΠ΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. Иногда ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ СдинствСнным Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ. ВсС зависит ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ случая ΠΈΡ… использования.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Π΄Π΅Π»Π°Ρ… ΠΌΡ‹ ознакомимся с нСсколькими ситуациями, ΠΊΠΎΠ³Π΄Π° f-строки ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π΅ самым Π»ΡƒΡ‡ΡˆΠΈΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ. НачнСм с Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ рассмотрим Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ использования, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ тСсно связан с удобством чтСния ΠΊΠΎΠ΄Π°. Π Π΅Ρ‡ΡŒ ΠΈΠ΄Π΅Ρ‚ ΠΎΠ± интСрполяции Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΠ· словаря Π² Π·Π°Π΄Π°Π½Π½ΡƒΡŽ строку.

Π˜Π½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΡΡ†ΠΈΡ словарных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

Π˜Π½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΡΡ†ΠΈΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΠ· словаря Π² строку ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ распространСнной ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎΡΡ‚ΡŒΡŽ Π² вашСм ΠΊΠΎΠ΄Π΅. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π²Ρ‹ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ f-строки – это ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ ΠΎΠ± ΠΈΡ… использовании для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой Π·Π°Π΄Π°Ρ‡ΠΈ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

>>> person = {"name": "Jane Doe", "age": 25}

>>> f"Hello, {person['name']}! You're {person['age']} years old."
"Hello, Jane Doe! You're 25 years old."

ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ! Код Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ просто Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. Однако ΠΎΠ½ выглядит Π½Π΅ совсСм чистым ΠΈΠ·-Π·Π° всСх этих поисков ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π² словарС, встроСнных Π² строку. Π‘Ρ‚Ρ€ΠΎΠΊΠ° f выглядит Π·Π°Π³Ρ€ΠΎΠΌΠΎΠΆΠ΄Π΅Π½Π½ΠΎΠΉ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠΉ. Как насчСт использования ΠΌΠ΅Ρ‚ΠΎΠ΄Π° .format()?

Π’ΠΎΡ‚ новая вСрсия вашСго ΠΊΠΎΠ΄Π°:

>>> "Hello, {name}! You're {age} years old.".format(**person)
"Hello, Jane Doe! You're 25 years old."

>>> "Hello, {name}!".format(**person)
'Hello, Jane Doe!'

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ вмСсто поиска ΠΏΠΎ ΡΠ»ΠΎΠ²Π°Ρ€ΡŽ Π² ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π°Ρ… Π·Π°ΠΌΠ΅Π½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ нСпосрСдствСнно ΠΈΠΌΠ΅Π½Π°. ЕдинствСнным Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ являСтся использованиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° распаковки словаря ** ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ .format(). Π’Π΅ΠΏΠ΅Ρ€ΡŒ строка выглядит Ρ‡ΠΈΡ‰Π΅ ΠΈ ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΡ€ΠΎΡ‡Π΅, Ρ‡Π΅ΠΌ Π² Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅ с использованиСм f-строки.

Π’ качСствС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ прСимущСства Π²Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ количСство ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ΠΎΠ²-Π·Π°ΠΌΠ΅Π½ΠΈΡ‚Π΅Π»Π΅ΠΉ Π² строкС Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с количСством ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΌ словарС. ΠœΠ΅Ρ‚ΠΎΠ΄ .format() Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ лишниС ΠΊΠ»ΡŽΡ‡ΠΈ.

Π’Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ modulo:

>>> "Hello, %(name)s! You're %(age)s years old." % person
"Hello, Jane Doe! You're 25 years old."

>>> "Hello, %(name)s!" % person
'Hello, Jane Doe!'

На этот Ρ€Π°Π· строка ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π°ΡΡŒ Π΅Ρ‰Π΅ ΠΊΠΎΡ€ΠΎΡ‡Π΅. Π’Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ нСпосрСдствСнныС ΠΈΠΌΠ΅Π½Π° Π² ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π°Ρ… Π·Π°ΠΌΠ΅Π½Ρ‹, ΠΈ Π²Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ΅Π½ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ распаковки словаря, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ modulo распаковываСт ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ Π·Π° вас. Однако Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Ρ‹ Π·Π°ΠΌΠ΅Π½Ρ‹ Π½Π΅ Ρ‚Π°ΠΊ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ, Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ modulo ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Π΅ возмоТности форматирования.

Π’Π°ΠΊ ΠΊΠ°ΠΊΡƒΡŽ ΠΆΠ΅ Π²Π΅Ρ€ΡΠΈΡŽ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°Π΅Ρ‚Π΅ Π²Ρ‹? ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ своими сообраТСниями Π² коммСнтариях!

ЛСнивая ΠΎΡ†Π΅Π½ΠΊΠ° Π² Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ

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

К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π² ΠΊΠΎΠ΄Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сотня ΠΎΡ‚Π»Π°Π΄ΠΎΡ‡Π½Ρ‹Ρ… сообщСний, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π΅ΡΡΡ‚ΡŒ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π°ΡŽΡ‰ΠΈΡ…. Если Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ f-строку ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ .format() для создания сообщСний протоколирования, Ρ‚ΠΎ Python Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС строки нСзависимо ΠΎΡ‚ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ уровня протоколирования.

Однако Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ % ΠΈ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ значСния для интСрполяции Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ протоколирования, Ρ‚ΠΎ это ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ вСсь процСсс . ΠœΠΎΠ΄ΡƒΠ»ΡŒ протоколирования Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ строки, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ относятся ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ ΠΈ Π±ΠΎΠ»Π΅Π΅ высоким уровням протоколирования.

Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

>>> import logging
>>> msg = "This is a %s message!"

>>> logging.warning(msg, "WARNING")
WARNING:root:This is a WARNING message!

>>> logging.debug(msg, "DEBUGGING")

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ для создания сообщСния протоколирования ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ синтаксис ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° modulo. Π—Π°Ρ‚Π΅ΠΌ Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° функциям протоколирования пСрСдаСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для протоколирования ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ WARNING, Π² ΠΆΡƒΡ€Π½Π°Π» Π±ΡƒΠ΄ΡƒΡ‚ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ сообщСния этого уровня ΠΈ Π²Ρ‹ΡˆΠ΅. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ функция debug() Π½Π΅ Π²Ρ‹Π΄Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… сообщСний.

Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ debug() интСрполяция строк Π½Π΅ происходит, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π±ΠΎΠ»Π΅Π΅ высокий ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ протоколирования. Однако Ссли ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ .format(), ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π½ΠΈΠΆΠ΅ ΠΊΠΎΠ΄Π΅, Ρ‚ΠΎ интСрполяция Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ всСгда:

>>> msg = "This is a {} message!"

>>> logging.debug(msg.format("DEBUGGING")

Если Π²Ρ‹ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚Π΅ debug() ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ Ρ€Π°Π· Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ†ΠΈΠΊΠ»Π°, Ρ‚ΠΎ Python Π±ΡƒΠ΄Π΅Ρ‚ усСрдно ΠΎΡ†Π΅Π½ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΠΈ интСрполяция ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ Ρ€Π°Π·. Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π°. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ протоколирования выполняСт ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΡΡ†ΠΈΡŽ Π»Π΅Π½ΠΈΠ²ΠΎ.

Π›Π΅Π½ΠΈΠ²Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ строк Π² ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ большоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈ это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ использовании ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° modulo.

SQL-запросы ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…

ИспользованиС любого инструмСнта интСрполяции строк являСтся ΠΏΠ»ΠΎΡ…ΠΎΠΉ ΠΈΠ΄Π΅Π΅ΠΉ ΠΏΡ€ΠΈ создании SQL-запросов с динамичСскими ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ. Π’ этом ситуации срСдства интСрполяции ΠΏΡ€ΠΎΠ²ΠΎΡ†ΠΈΡ€ΡƒΡŽΡ‚ Π°Ρ‚Π°ΠΊΠΈ Ρ‚ΠΈΠΏΠ° SQL-ΠΈΠ½ΡŠΠ΅ΠΊΡ†ΠΈΠΈ.

Для ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½Ρ‹Ρ… PostgresSQL, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ Psycopg 2, ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ запрос для получСния списка всСх ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ с Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Ρ€ΠΎΠ»ΡŒΡŽ ΠΈΠ»ΠΈ привилСгиями. Π’Ρ‹ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π»ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… запросов:

import psycopg2

connection = psycopg2.connect(
    database="db",
    user="user",
    password="password"
)
cursor = connection.cursor()

role = "admin"

query_modulo = "SELECT * FROM users WHERE role = '%s'" % role
query_format = "SELECT * FROM users WHERE role = '{role}'".format(role=role)
query_f_string = f"SELECT * FROM users WHERE role = '{role}'"

cursor.execute(query_modulo)
cursor.execute(query_format)
cursor.execute(query_f_string)

ВсС эти строки Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ запроса Π² ΠΈΡ‚ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ подтвСрТдСния ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ бСзопасности. Если Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ любой ΠΈΠ· этих запросов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° .execute(), Ρ‚ΠΎ Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ смоТСт Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ бСзопасности ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², Ρ‡Ρ‚ΠΎ сдСлаСт ваш ΠΊΠΎΠ΄ уязвимым для Π°Ρ‚Π°ΠΊ SQL-ΠΈΠ½ΡŠΠ΅ΠΊΡ†ΠΈΠΉ.

πŸ’‘ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅
Код Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π½Π΅ выполняСтся ΠΈΠ·-Π·Π° отсутствия Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ psycopg2 ΠΈ прСдполоТСния ΠΎΠ± ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ структурС ΠΈ настройкС Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ лишь наглядный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ риска SQL-ΠΈΠ½ΡŠΠ΅ΠΊΡ†ΠΈΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ синтаксис ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° % для создания шаблона запроса, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ запроса Π² качСствС Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π° .execute() Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ° ΠΈΠ»ΠΈ списка:

query_template = "SELECT * FROM users WHERE role = %s"

cursor.execute(query_template, (role,))

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ для создания шаблона запроса ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ синтаксис ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° %. Π—Π°Ρ‚Π΅ΠΌ Π² качСствС нСзависимого Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° .execute() ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹. Π’ этом случаС ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ запроса систСма Π±Π°Π· Π΄Π°Π½Π½Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€ΠΎΠ»ΠΈ. Вакая ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° обСспСчиваСт Π·Π°Ρ‰ΠΈΡ‚Ρƒ ΠΎΡ‚ SQL-ΠΈΠ½ΡŠΠ΅ΠΊΡ†ΠΈΠΉ.

πŸ’‘ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅
Бинтаксис ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° modulo слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² строковом Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π΅, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΌ шаблон запроса. НС слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈ Ρ„Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² для создания ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ запроса. ΠŸΡƒΡΡ‚ΡŒ .execute() сдСлаСт всю Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΈ создаст ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ запрос Π±ΠΎΠ»Π΅Π΅ бСзопасным способом.

ΠŸΡ€ΠΎΡ‰Π΅ говоря, слСдуСт ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ использования ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ инструмСнтов строковой интСрполяции для создания динамичСских запросов. ВмСсто этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ синтаксис ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° % для создания шаблона запроса ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ запроса Π² .execute().

Π˜Π½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΈ локализация

Если Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈ Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π² Python-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅, слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ .format():

>>> greeting_template = "{greeting} Pythonista!"

>>> greeting_en = "Good Morning!"
>>> greeting_es = "Β‘Buenos dΓ­as!"
>>> greeting_fr = "Bonjour!"

>>> for greeting in (greeting_en, greeting_es, greeting_fr):
...     print(greeting_template.format(greeting=greeting))
...
Good Morning! Pythonista!
Β‘Buenos dΓ­as! Pythonista!
Bonjour! Pythonista!

Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ шаблонов строк ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ нСсколько языков. Π—Π°Ρ‚Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ строк Π² зависимости ΠΎΡ‚ мСстонахоТдСния ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. ΠœΠ΅Ρ‚ΠΎΠ΄ .format() позволяСт автоматичСски ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ строки Π² зависимости ΠΎΡ‚ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ языка.

АвтоматичСскоС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ старых строк Π² F-строки

Если Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ Π½Π°Π΄ пСрСносом ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΉ ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Ρ‹ Π½Π° соврСмСнный Python ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π²Π°ΡˆΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ являСтся ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ всСх строк Π² f-строки, Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ flynt. Π­Ρ‚ΠΎΡ‚ инструмСнт позволяСт быстро ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ классичСскиС строки Π² f-строки.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ flynt, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ сначала ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Π³ΠΎ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ pip:

$ python -m pip install flynt

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΈ устанавливаСт flynt Π² Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ срСду Python. ПослС Π΅Π΅ установки ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΊΠΎΠ΄Π°. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ вас Π΅ΡΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Ρ„Π°ΠΉΠ» Python:

# sample.py

name = "Jane"
age = 25

print("Hello, %s! You're %s years old." % (name, age))

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ этот Ρ„Π°ΠΉΠ» ΠΈ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ f-строки вмСсто ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° %, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ просто Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

$ flynt sample.py
Running flynt v.1.0.1
Using config file at .../pyproject.toml

Flynt run has finished. Stats:

Execution time:                            0.002s
Files checked:                             1
Files modified:                            1
Character count reduction:                 78 (98.73%)

Per expression type:
Old style (`%`) expressions attempted:     1/2 (50.0%)
No `.format(...)` calls attempted.
No concatenations attempted.
No static string joins attempted.
F-string expressions created:              1
…

Π­Ρ‚Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ flynt ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ содСрТимоС Ρ„Π°ΠΉΠ»Π° sample.py посрСдством Π·Π°ΠΌΠ΅Π½Ρ‹ строк, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ % ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ .format(), Π½Π° эквивалСнтныС f-строки. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ эта ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ ваши Ρ„Π°ΠΉΠ»Ρ‹ Π½Π° мСстС. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, послС выполнСния ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ sample.py Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

# sample.py

name = "Jane"
age = 25

print(f"Hello, {name}! You're {age} years old.")

Π­Ρ‚ΠΎ Π·Π΄ΠΎΡ€ΠΎΠ²ΠΎ, Π½Π΅ ΠΏΡ€Π°Π²Π΄Π° Π»ΠΈ? Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ flynt для всСго ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°, содСрТащСго Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΠΊΠΎΠ΄ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ Python. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° просканируСт ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ старыС строки Π² f-строки. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, инструмСнт ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»Π΅Π·Π΅Π½, Ссли Π²Ρ‹ ΠΌΠΎΠ΄Π΅Ρ€Π½ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ свою ΠΊΠΎΠ΄ΠΎΠ²ΡƒΡŽ Π±Π°Π·Ρƒ.

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ ΠΎΠ±Ρ‰ΠΈΠ΅ вопросы, ΠΎΠ±ΠΎΠ±Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ самыС Π²Π°ΠΆΠ½Ρ‹Π΅ понятия, ΠΈΠ·ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ Π² этом руководствС. Π­Ρ‚ΠΈ вопросы ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, повторСния ΠΈ закрСплСния ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Π·Π½Π°Π½ΠΈΠΉ. ПослС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ вопроса находится ΠΎΡ‚Π²Π΅Ρ‚, спрятанный Π² Ρ€Π°ΡΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΌΡΡ Ρ€Π°Π·Π΄Π΅Π»Π΅. Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Π½Π° ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Π΅ ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ/ΡΠΊΡ€Ρ‹Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π΅Π³ΠΎ. Но сначала ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΡ‚ΡŒ свой Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΎΡ‚Π²Π΅Ρ‚Π°. Π“ΠΎΡ‚ΠΎΠ²Ρ‹ Π»ΠΈ Π²Ρ‹?

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ f-строки Π² Python?
Как Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ f-строку Π² Python?
Π’ Ρ‡Π΅ΠΌ прСимущСства f-строк ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с классичСскими инструмСнтами?

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΈ

Π›Π£Π§Π¨Π˜Π• БВАВЬИ ПО Π’Π•ΠœΠ•

admin
11 дСкабря 2018

ООП Π½Π° Python: ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python допускаСт Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΠΈ, Π½ΠΎ Π² Π΅Π³ΠΎ основС...
admin
28 июня 2018

3 самых Π²Π°ΠΆΠ½Ρ‹Ρ… сфСры примСнСния Python: возмоТности языка

БущСствуСт мноТСство областСй примСнСния Python, Π½ΠΎ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΠ½ особСнно...
admin
13 фСвраля 2017

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python: ΠΎΡ‚ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ° Π΄ΠΎ профСссионала

Пошаговая инструкция для всСх, ΠΊΡ‚ΠΎ Ρ…ΠΎΡ‡Π΅Ρ‚ ΠΈΠ·ΡƒΡ‡ΠΈΡ‚ΡŒΒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π° Python...