2011-09-01 38 views
0

我正在修改python代码,并且遇到了这个声明,不知道它的含义,也不能在interent上找到任何东西。对不起,它的背景不符合。字符串建立:隐藏字符串长度?

conn.queue.put('%x\r\n%s\r\n' % (len(chunk), chunk) 
             if chunked else chunk) 

该代码将一个块放入线程队列以便稍后发送。我的问题是这里发生了什么'%x \ r \ n%s \ r \ n'看起来它把字符串长度然后用回车隐藏它?另外,我混淆了'if chunked else chunk',只要它是一个没有body的if语句。

感谢

+2

“用回车隐藏它”?你不是说用DOS风格的行尾结尾的'\ r \ n'将它分成两行吗?你为什么说“隐藏”?是什么让这件事“隐藏”给你? –

回答

2

这不是一个if语句,没有身体,这是一个条件表达式。如果condition为真,则A if condition else B评估为A,否则评估为B。因此,在这种情况下:

'%x\r\n%s\r\n' % (len(chunk), chunk) 
            if chunked else chunk 

要么是:

'%x\r\n%s\r\n' % (len(chunk), chunk) 

或只是chunk,取决于是否chunked是真还是假。然后将结果传递给conn.queue.put

+0

谢谢,不知道如果分块会产生什么结果字符串?比如len(chunk)= 3和chunk ='abc' –

+0

@Tony:结果将会是''3 \ r \ nabc \ r \ n“',基本上是长度,换行符,字符串,然后另一个换行符。请参阅http://en.wikipedia.org/wiki/Chunked_transfer_encoding#Example,了解在HTTP 1.1会话中的外观 –