为什么字符字符串和字节字符串的迭代方式不同?

问题描述 投票:0回答:1

我注意到 for 循环在 Python 字符串上迭代有一些奇怪的地方。对于字符字符串,您将获得每个包含单个字符的字符串。

>>> for c in 'Hello':
    print(type(c), repr(c))

<class 'str'> 'H'
<class 'str'> 'e'
<class 'str'> 'l'
<class 'str'> 'l'
<class 'str'> 'o'

对于字节字符串,您会得到整数。

>>> for c in b'Hello':
    print(type(c), repr(c))

<class 'int'> 72
<class 'int'> 101
<class 'int'> 108
<class 'int'> 108
<class 'int'> 111

我为什么关心?我想编写一个函数,它接受文件或字符串作为输入。对于文本文件/字符串,这很容易;你只需要使用两个循环。对于字符串输入,第二个循环是多余的,但它仍然有效。

def process_chars(string_or_file):
    for chunk in string_or_file:
        for char in chunk:
            # do something with char

您无法对二进制文件和字节字符串执行相同的操作,因为对于字节字符串,第一个循环的结果是不可迭代的。

python string for-loop bytestring
1个回答
0
投票

为什么不检查类型并使用

str
decode
(如果是字节字符串或文件)?

© www.soinside.com 2019 - 2024. All rights reserved.