从一行到常规For循环

时间:2014-05-14 18:34:08

标签: python for-loop

我在一行中有以下For循环:

var = ''.join('%02x' % ord(b) for b in string_var)

如何在常规for循环中显示?

2 个答案:

答案 0 :(得分:5)

使用慢速字符串连接:

var = ''
for b in string_var:
    var += '%02x' % ord(b)

你所拥有的是generator expression;它确实产生了一个传递给str.join()方法的序列。 ''.join()将序列连接成一个带有空分隔符的字符串。

要使用''.join()来电,您可以先建立一个列表:

results = []
for b in string_var:
    results.append('%02x' % ord(b))
var = ''.join(results)

或使用生成器功能执行相同的操作:

def to_hex(lst):
    for b in lst:
        yield '%02x' % ord(b)

var = ''.join(to_hex(string_var))

答案 1 :(得分:2)

效率低于join,因为它会强制Python每次执行+=时为新字符串分配内存,但它仍然有效

var = ''
for b in string_var:
    var += '%02x' % ord(b)

此外,您可以将join的参数转换为list来加快代码速度:

var = ''.join(['%02x' % ord(b) for b in string_var])

使用binascii.hexlify可能是最简单的方法

from binascii import hexlify 
var = hexlify('uhh'.encode())