为什么在这种情况下要使用str()?

4

这些是来自 django.db.models.fields 的代码。

__all__ = [str(x) for x in (
    'AutoField', 'BLANK_CHOICE_DASH', 'BigAutoField', 'BigIntegerField',
    'BinaryField', 'BooleanField', 'CharField', 'CommaSeparatedIntegerField',
    'DateField', 'DateTimeField', 'DecimalField', 'DurationField',
    'EmailField', 'Empty', 'Field', 'FieldDoesNotExist', 'FilePathField',
    'FloatField', 'GenericIPAddressField', 'IPAddressField', 'IntegerField',
    'NOT_PROVIDED', 'NullBooleanField', 'PositiveIntegerField',
    'PositiveSmallIntegerField', 'SlugField', 'SmallIntegerField', 'TextField',
    'TimeField', 'URLField', 'UUIDField',
)]

我认为在这种情况下,str(x) for x in (...)x for x in (...)是相同的。 为什么要使用str()?
1个回答

7
请注意代码顶部的from __future__ import unicode_literals。 现在默认情况下每个字符串字面量都将是Unicode字符串(就像在Python 3中一样)。
>>> from __future__ import unicode_literals
>>> s = 'test'
>>> type(s)
<type 'unicode'>

为了避免评论中提到的“TypeError”错误。
# Avoid "TypeError: Item in ``from list'' not a string" -- unicode_literals
# makes these strings unicode

元组中的所有Unicode文字都会被转换为Python 2字节串。

如果顶部的import语句不存在,那么在两个版本的Python中,列表推导式将完全没有意义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接