Python 从一行到常规For循环

Python 从一行到常规For循环,python,for-loop,Python,For Loop,我在一行中有以下For循环: var = ''.join('%02x' % ord(b) for b in string_var) 它是如何在常规for循环中显示的?这比join效率低,因为每次执行+=操作时,它都会强制Python为新字符串分配内存,但仍然有效 var = '' for b in string_var: var += '%02x' % ord(b) 此外,您还可以通过将join的参数转换为list来加快代码的速度: var = ''.join(['%02x' % o

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

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

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

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

var = ''
for b in string_var:
    var += '%02x' % ord(b)
此外,您还可以通过将
join
的参数转换为
list
来加快代码的速度:

var = ''.join(['%02x' % ord(b) for b in string_var])
实现这一点最简单的方法可能是使用:


使用慢速字符串连接:

var = ''
for b in string_var:
    var += '%02x' % ord(b)
你所拥有的是一个;它确实生成了一个传递给
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))
def to_hex(lst):
    for b in lst:
        yield '%02x' % ord(b)

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