我不确定这里发生了什么,但我有一些python代码:
import sys
max_cols = 350
max_rows = 1
r1 = range(max_rows)
r2 = range(max_cols)
for y in r1:
for x in r2:
sys.stdout.write('something')
if x is not max_cols-1:
sys.stdout.write(',')
现在,这适用于max_cols< = 257的值。 但是,如果您使用> = 258,最后会得到额外的','。 (这里的想法显然是生成一个CSV文件。)
现在,256是一个CS编号,因此这里显然有一些我不知道的事情,因为在此之前一切都完美无缺。当我尝试使用相同的模式写入文件时也会发生这种情况。
为什么会这样?
使用Python 3.2。
答案 0 :(得分:5)
is
不用于检查相等性,但用于检查身份。 x is y
仅在两个变量引用同一对象时才为真。碰巧,CPython重用小整数的对象 - 但一般来说,身份的概念与平等概念有很大的不同。分别使用正确的运算符==
和!=
来表示相等和不等式,它可以正常工作。
另请注意,只需使用csv
module即可使代码更简单,更健壮。无需重新发明轮子。
答案 1 :(得分:2)
CPython实现缓存小数字,因此数字12
的所有实例都是同一个对象。 is
运算符会比较对象的标识,而不是它们的值。您想要做的是使用!=
运算符来比较值。
您的CPython实现实例可能会缓存最多256个数字。
顺便提一下,每当你碰到这样的模式时,你必须从分隔的事物列表中删除最后一个分隔符,str.join
可能是你想要的。