2012-06-02 4 views
1

Я считаю себя писать много вещей, как это:Python формат строки из текущего пространства имен

s = "{v1}_{v2}_{v3}_{v4}_{v5}".format(v1="foo", v2=v2, v3=v3, v4=v4, v5=v5) 

Можно ли сделать Питона string.format использовать переменные из текущего пространства имен? Вышеупомянутый вызов можно было бы затем упростить до:

s = "{v1}_{v2}_{v3}_{v4}_{v5}".format(v1="foo") 

ответ

12

Вы что-то думаете об этом?

>>> v1 = "foo" 
>>> v2,v3,v4,v5 = 1,2,3,4 
>>> s = "{v1}_{v2}_{v3}_{v4}_{v5}".format(v1="foo", v2=v2, v3=v3, v4=v4, v5=v5) 
>>> s 
'foo_1_2_3_4' 
>>> s = "{v1}_{v2}_{v3}_{v4}_{v5}".format(**locals()) 
>>> s 
'foo_1_2_3_4' 

Для записи, однако, я бы этого не делал. Если переменные являются одними и теми же, то они должны быть вместе в некоторой структуре, из которой можно было бы получить значения без использования locals(). Даже если это не так, я думаю, что я предпочел бы объединить их в отдельный файл вручную, а затем использовать это, прежде чем использовать locals() таким образом.

[ Ред. Вы такой лицемер. Вы используете string.Template и locals() таким образом все время для создания наборов параметров файлов для моделирования. Не притворяйтесь, что вы этого не сделаете.

Me: Да, но я не хочу поощрять других людей забирать мои плохие привычки.

Ред. По крайней мере, вы должны признать, что вы считаете это полезным, если вы собираетесь притворяться более явным, чем ты, кодер.

Me: ...]

+0

Я использую "** вары()" вместо "** местных жителей()" в сохранить нажатия клавиш. ;-) – Marmaduke

0

Существует new feature in Python 3.6, что дает эту возможность непосредственно:

>>> name = "Fred" 
>>> f"He said his name is {name}." 
'He said his name is Fred.' 
Смежные вопросы