f-строки (форматированные строки) для новичков в Python

Эта часть в первую очередь предназначена для тех, кто плохо знаком с Python. К ним относятся математики, экономисты и т. Д., Которые хотят использовать Python в среде Jupyter. Вот краткое руководство о том, как сделать Best of Jupyter.

Если вы знакомы с более ранними версиями Python, вот мои лучшие советы о том, как перейти от .format () к этой новой:

_fstring = f'Total: {one + two}' # Go f-string!
_format = 'Total: {}'.format(one + two)
_percent = 'Total: %s' % (one + two)
_concatenation = 'Total: ' + str(one + two)
assert _fstring == _format == _percent == _concatenation

Магия ф-струны

f-строки - это то, как вы должны использовать операторы печати в Python. Он довольно напоминает LaTeX в своей встроенной нотации:

# inline variables, similar to LaTeX
name = "Fred"
print(f"He said his name is {name}.")
# 'He said his name is Fred.'

Обратите внимание, как переменную name теперь можно использовать в строке. Это простой и легкий в использовании синтаксис: просто включите переменную в окружающий {}, отметив строковый тип как f-строку с помощью ‘f’ в начале.

Примечание для опытного программиста: «f» можно комбинировать с «r» для получения необработанной f-строки, которая может использоваться внутри регулярных выражений или аналогичных функций. «F» нельзя комбинировать с «u», потому что все строки Python3.6 + теперь по умолчанию являются Unicode. Это означает, что вы можете писать строки на хинди, китайском, французском, корейском и как минимум на 10 других языках.

Вы можете писать строки на хинди, китайском, французском, корейском и на любом языке, поддерживаемом Unicode.

Но почему они вообще называются форматированными строками? Потому что вы можете использовать с некоторыми классными приемами форматирования.

Упрощенное выравнивание и интервалы

Вы когда-нибудь пробовали создать такую ​​таблицу для ведения журнала или визуализации? Расположение элементов превращается в кошмар, когда вокруг летают несколько \ t символов табуляции.

Это намного проще сделать с f-строками Python, используя оператор двоеточия «:», за которым следует оператор выравнивания и значение ширины поля.

Существует как минимум 3 оператора выравнивания: ‹для выравнивания по левому краю,› для выравнивания по правому краю и ^ для выравнивания по центру. Обратитесь к примеру кода:

correct = 'correct'
phonetic_correct = 'phonetic_correct'
typo = 'typo'
phonetic_typo = 'phonetic_typo'
phonetic_distance = 'phonetic_distance'
print(f'No Spacing:')
print(f'{correct}|{phonetic_correct}|{typo}|{phonetic_typo}|{phonetic_distance}|\n')
# No Spacing:
# correct|phonetic_correct|typo|phonetic_typo|phonetic_distance|
print(f'Right Aligned:')
print(f'{correct:>10}|{phonetic_correct:>20}|{typo:>10}|{phonetic_typo:>20}|{phonetic_distance:>20}|\n')
# Right Aligned:
# correct| phonetic_correct| typo| phonetic_typo| phonetic_distance|
print(f'Left Aligned:')
print(f'{correct:<10}|{phonetic_correct:<20}|{typo:<10}|{phonetic_typo:<20}|{phonetic_distance:<20}|\n')
# Left Aligned:
# correct |phonetic_correct |typo |phonetic_typo |phonetic_distance |
print(f'Centre Aligned:')
print(f'{correct:^10}|{phonetic_correct:^20}|{typo:^10}|{phonetic_typo:^20}|{phonetic_distance:^20}|')
# Centre Aligned:
# correct | phonetic_correct | typo | phonetic_typo | phonetic_distance |

У вас также есть поддержка десятичного усечения и аналогичных стандартных утилит форматирования:

# auto-resolve variable scope when nested
width = 10
precision = 4
value = decimal.Decimal("12.34567")
print(f"result: {value:{width}.{precision}}") # nested fields
# 'result: 12.35'

Вы можете заметить здесь кое-что интересное: ширина и точность автоматически выбираются из области видимости. Это означает, что вы можете рассчитать ширину и точность, используя ширину экрана или другие входные данные из системы, и использовать их.

Полная поддержка выражений Python

Вышеупомянутое возможно только потому, что выражение внутри {} фактически оценивается, или в терминах программирования: выполняется.

items = list(range(0, 5)) # create list of 5 elements
print(items)
# [0, 1, 2, 3, 4]
print(f'number of items: {len(items)}')
# number of items: 5

Это означает, что вы можете вызывать любую функцию из этих {}.

Однако на практике вам следует избегать этого очень часто, потому что это может сильно затруднить отладку. Вместо этого сохраните возвращаемое значение из функции в переменной, а затем добавьте переменную в оператор печати fstring.

Те, кто пришел из функционального программирования, могут пропустить свои лямбда-функции. Не волнуйтесь, Python поможет вам:

Лямбда-функции в f-строках

# If you feel you must use lambdas, they may be used inside of parentheses:
print(f'{(lambda x: x*3)(3)}')
# '9'
# not that this returned a <str> and not <int>

Конец демоверсии

Хотите увидеть живую демонстрацию, в которой мы используем f-строки для исправления орфографии в Python? Проверьте функцию calculate_distance в этом сквозном руководстве

Резюме

  • Строки f означают, что вы можете включать переменные и вызовы функций в свои операторы печати и т.п.
  • встроенная переменная: разработчику легче читать и отлаживать
  • По возможности используйте f-струны!