2015-01-29 4 views
3

Я просто приступаю к работе с Python и задал вопрос о лучших практиках (или, по крайней мере, общах) вокруг использования .format в строке.Рекомендации по форматированию Python

Мой вопрос в основном вокруг, когда вы будете использовать пустые фигурные скобки по сравнению с номером индекса против имени.

Например, если у вас была одна переменная, которую вы хотели включить в строку, которую вы бы сделали?

print "I {} Stack Overflow".format(var) 
print "I {0} Stack Overflow".format(var) 
print "I {verb} Stack Overflow".format(verb = var) 

Это изменение, если у вас есть несколько переменных, которые вы хотите включить? Может быть, это нормально включить {} для одного var, но никогда для нескольких vars?

Любые мысли или идеи здесь были бы оценены.

Спасибо!

+0

Я не уверен, что говорит pep8 ... но мне не нравятся пустые фигурные скобки ... и мой любимый метод method3 ...но, вероятно, только мне. –

+0

Я обычно использую '{}' или '{word}', в зависимости от того, что более читаемо для данной задачи. –

+0

Это, мой друг, зависит от вашего вкуса. :) – Niyojan

ответ

3

Я не думаю, что там (пока) любая практика создана как «лучше» или даже как «общий», так что вы получите кучу мнений (в том числе и мой :-).

Я думаю, чтоcurlies - это путь, когда ваша строка формата является переменной (например, исходя из базы данных или файла конфигурации, выбранной в зависимости от выбранного пользователем языка и т. Д.) И потому, что они позволяют выбирать, какие (названных) аргументов для форматирования, порядка, возможно, повторить их и т. д., оставаясь читаемым.

Если строка формата является буквальной, пустые завитки a la {} являются наименее навязчивыми и, следовательно, могут оказаться наиболее читаемыми - если ваша строка формата не имеет «слишком много» из них, что, конечно же, является суждением стиля.

По крайней мере, это проблема стиля, очень близкая к той, с которой вы сталкиваетесь каждый раз, когда вы определяете или называете функцию - как любые позиционные аргументы или параметры «слишком много» для удобочитаемости, если вы отправляете целых свиней по именованным параметрам и только аргументы и т. д. и т. д. Подобные соображения применимы!

+0

'' {: {} {} d} ". format (2,0,3)' только имеет 3: P (я думаю, что у меня есть порядок аргументов прямо там ...) –

+1

@ JoranBeasley, я согласен с тем, что читаемость также может пострадать, когда относительно мало анонимных записей «обманывают» незнакомыми способами. Также интересно отметить, что добавление номеров аргументов в строку формата также не помогло бы в удобочитаемости - только имена с обеих сторон могли бы помочь. –

+0

@AlexMartelli хорошо, я немного не согласен ... по крайней мере с индексированием чисел, я мог бы сказать, какой аргумент был: P (+1 все равно из-за того, что вы всегда знаете свои вещи: P) –

1

Можно использовать пустые фигурные скобки для одной или двух переменных. Я бы рекомендовал использовать именованный замену:

  • для большего числа переменных
  • в ситуациях, когда на смену строки трудно читать
  • при закачке вар повторяется.
+0

Значит, вы бы никогда не использовали метод индексных номеров? – NimbusScale

+0

Я бы использовал индекс один при повторном использовании переменной в формате '' {0} {1} {0} ". Format (a, b)' –

3

print "I {} Переполнение стека.". Format (var) - правильный путь.

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

print "I {} Stack Overflow. It is a great {} {}!".format(var, var1, var3) 
+0

все они «правильные» ... Мне любопытно, где вы получить информацию о том, что пустые фигурные скобки являются предпочтительным способом по индексам или именам переменных. –

+0

Все три метода, описанные выше, действительны, почему вы говорите, что пустые фигурные скобки являются «правильными» способами? – NimbusScale

+0

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

1

Я знаю, что это старый вопрос, но Python 3.6 предлагает очень классный строковый формат, называемый «f-strings». Это похоже на Javascript. Вот простой пример:

name = "John" 
age = 25 

print(f"My name is {name} and I am {age} years old.") 

Он работает только в Python 3.6 и выше, но я думаю, что это самый простой и более читаемым способ форматирования строки в Python.

Смежные вопросы