已回答以下问题-
1)different run results between python3 and python2 for the same code
2)“is” operator behaves unexpectedly with integers
3)Consecutive 'is' operator in Python [duplicate]
5)What does 'is' operator do in Python?
6)Strange python 'is' operator in arithmetic [duplicate]
7)Why does the “is” keyword have a different behavior when there is a dot in the string?
不重复问题的解释-在我的问题中,我没有包含任何符号和数值。我包括简单的字符串。在上面提到的第7个问题中,我已经知道提供不同输出的原因,并且我已经阅读了。
在这里,我的问题不同了。
我的问题描述-
我正在练习遵循3.6.8版本的Python代码并使用PyCharm编辑器。
print('a' * 18 is 'aaaaaaaaaaaaaaaaaa')
print('a' * 19 is 'aaaaaaaaaaaaaaaaaaa')
print('a' * 20 is 'aaaaaaaaaaaaaaaaaaaa')
print('a' * 21 is 'aaaaaaaaaaaaaaaaaaaaa')
print('a' * 22 is 'aaaaaaaaaaaaaaaaaaaaaa')
输出=
True
True
True
False
False
为什么'a' * 21 is 'aaaaaaaaaaaaaaaaaaaaa'
及之后的字符串的计算结果不为True?
任何帮助将不胜感激
答案 0 :(得分:2)
为什么'a' * 21 is 'aaaaaaaaaaaaaaaaaaaaa'
及更高版本的字符串不计算为True?
从下图开始,倒数第二个源代码编译步骤将生成字节码的第一个版本。该“原始”字节码最终进入最后一个编译步骤,称为“窥孔优化”。此步骤的目标是通过将一些指令替换为更快的指令来产生更有效的字节码。
.pyc文件在所有Python软件包中都遇到。 Python字节码存储在这些文件中。如果有人写了这样的东西['foo!'] * 10 ** 9,会发生什么?生成的.pyc文件将很大!为了避免这种现象,如果通过窥孔优化生成的序列长度大于20,则将其丢弃。
因此,在上述问题中,以下给定代码对长度大于20的值产生 False 结果,而对于字符串20或小于20的值不产生 False
print('a' * 21 is 'aaaaaaaaaaaaaaaaaaaaa')
print('a' * 22 is 'aaaaaaaaaaaaaaaaaaaaaa')
输出=
False
False