请解释一下这个Python .format调用

时间:2013-07-11 14:35:06

标签: python syntax

我将用Python编写的Sonos控制器移植到另一种语言。我很难理解这个方法调用的作用:

 def __send_command(self, endpoint, action, body):
        headers = {
            'Content-Type': 'text/xml',
            'SOAPACTION': action
        }

        soap = SOAP_TEMPLATE.format(body=body)

特别是.format方法。据我所知,soap,SOAP_TEMPLATE和body都是字符串。

其中:

SOAP_TEMPLATE = '<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body>{body}</s:Body></s:Envelope>'

body = '<u:GetPositionInfo xmlns:u="urn:schemas-upnp-org:service:AVTransport:1"><InstanceID>0</InstanceID><Channel>Master</Channel></u:GetPositionInfo>'

有人可以用简单的英语解释.format方法在做什么吗?

3 个答案:

答案 0 :(得分:3)

Python有string formatting。这是一种格式化字符串的方法。 (准备它们,把它们放在一起)

示例:

>>> "hello {name}".format(name="garry")
'hello garry'

或者,更好的例子:

>>> for name in ["garry", "inbar"]:
    print "hello {name}".format(name=name)


hello garry
hello inbar

在您的情况下,SOAP_TEMPLATE可能是一个包含{body}标记的字符串,此函数接受它并将传递给该函数的body添加到该字符串中。

答案 1 :(得分:3)

str.format()将值插入字符串,并允许您设置这些值的格式。

您的字符串包含简单的占位符{body},并由作为关键字.format(body=body)传入的值替换。

模板的简短版本是:

>>> 'Hello {body}!'.format(body='World!')
'Hello World!!'

有关{}模板插槽如何指定要插入的值的详细信息,请参阅Format String Syntax,并Format Specification Mini-Language了解如何更改值的格式化方式。

答案 2 :(得分:3)

其他答案是正确的:这是关于字符串格式化的。

你的例子大致相当于:

def __send_command(self, endpoint, action, body):
    # ... some code here ...
    soap = '<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><s:Body>' + body + '</s:Body></s:Envelope>'
    # ... some code here ...

免责声明:代码不是 pythonic ,如果body不是str类型,它也可能会中断。我构建它的唯一原因是显示可能更像不同语言的东西(假设语言具有类似的连接字符串的符号)。