2013-10-09 4 views
0

Есть ли способ разместить объявленную строку между символами Unicode без конкатенации? Например, я объявил строку a = "house". Есть ли в любом случае я могу объявить <\house/> без , имеющей результат до "<\\" + a + "/>"? Конкатенация может стать громоздкой, когда задействуются больше символов Unicode.Построение строки без конкатенации в Python 2.7

ответ

2

как насчет интерполяции строк?

"<\\%s/>" % a 

или для нескольких элементов:

<"\\%s %s/>" % (a, b) 

Также работает со словарями:

"<\\%(a)s/>" % {'a': a} 

Python 3.x стиль интерполяции выполняется с помощью встроенного в str.format метода:

"<\\{}/>".format(a) 
"<\\{} {}/>".format(a, b) 
"<\\{1} {0}/>".format(a, b) # => "<\\" + b + " " + a + "/>" 
"<\\{a} {b}/>".format(a=a, b=b) 
+0

«Python 3.x style» работает в версии 2.6+, поэтому на самом деле это не совсем 3.x стиль – Blender

+0

@Blender: afaik эта функция была введена и добавлена ​​в 2.x из 3.x. –

2

Вы можете использовать метод str.format:

a = "Hello {name}, welcome to {place}." 
a.format(name="Salem", place="Tokyo") # "Hello Salem, welcome to Tokyo." 

docs.python.org - String format syntax

Если вам нужно что-то более мощное, вы можете использовать шаблон двигателя. Существует быстрый пример с Jinja2:

  • jinja_example.py

    from jinja2 import Template 
    
    template_file = Template(open("templatefile").read()) 
    
    obj = [ 
        {"name": "John", "surname": "Doe"}, 
        {"name": "Foo", "surname": "Bar"} 
    ] 
    
    print template_file.render(data=obj) 
    
  • TemplateFile

    <html> 
    <body> 
    {% if data %} 
        {% for user in data %} 
        <h1>Hello {{ user.name }} {{ user.surname }}.</h1> 
        {% endfor %} 
    {% else %} 
        <h1>Nothing found.</h1> 
    {% endif %} 
    </body> 
    </html> 
    

И выход (часть новой строки вынимается):

$ python jinja_example.py 
<html> 
<body> 
    <h1>Hello John Doe.</h1>  
    <h1>Hello Foo Bar.</h1> 
</body> 
</html> 

Вы можете найти огромный список шаблонов в Python Wiki.

+0

Python использует '#' для комментариев вместо '//'. – Dombey

+0

@ Dombey Да, да. Благодарю. – Salem

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