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 |
- PEP484 охватывает как примеры, так и философию
- Более пристальный взгляд на то, как работают f-строки Python - это более глубокое техническое погружение, включающее дизассемблированный байтовый код для понимания выигрыша во времени выполнения.
Магия ф-струны
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-струны!