我将用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
方法在做什么吗?
答案 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
类型,它也可能会中断。我构建它的唯一原因是显示可能更像不同语言的东西(假设语言具有类似的连接字符串的符号)。