Python将相等值解释为不相等值

Python将相等值解释为不相等值,python,Python,对于这部分代码,它位于For循环中 s = 'cl_num = %d, prev_cl_num = %d\n' % (cl_num, prev_cl_num); fd.write( s ); if cl_num != prev_cl_num: bb.instructions[i].is_cache_miss = 1; s = 'instruction %x is cache miss, cl_num = %d, prev_cl_num = %d, base_cache_line

对于这部分代码,它位于For循环中

s = 'cl_num = %d, prev_cl_num = %d\n' % (cl_num, prev_cl_num);
fd.write( s );
if cl_num != prev_cl_num:
    bb.instructions[i].is_cache_miss = 1;
    s = 'instruction %x is cache miss, cl_num = %d, prev_cl_num = %d, base_cache_line = %d\n' % (bb.instructions[i].address, cl_num, prev_cl_num, base_cache_line);
    fd.write( s );
    bb.instructions[i].cache_line = cl_num - base_cache_line;
    prev_cl_num = cl_num;
我得到一个输出,在fd文件中

cl_num = 65557, prev_cl_num = 65557
instruction 400558 is cache miss, cl_num = 65557, prev_cl_num = 65557, base_cache_line = 65557
cl_num = 65557, prev_cl_num = 65557
instruction 400560 is cache miss, cl_num = 65557, prev_cl_num = 65557, base_cache_line = 65557
cl_num = 65557, prev_cl_num = 65557
instruction 400568 is cache miss, cl_num = 65557, prev_cl_num = 65557, base_cache_line = 65557
cl_num = 65557, prev_cl_num = 65557
instruction 400570 is cache miss, cl_num = 65557, prev_cl_num = 65557, base_cache_line = 65557

你看,条件
cl\u num!=即使
cl\u num
等于
prev\u cl\u num
,prev\u cl\u num
也会被计算为
true
。为什么会这样?

您有浮点值,但只将整数部分写入文件:

>>> '%d' % 3.3
'3'
注意
.3
小数部分是如何被忽略的
%d
对插值调用
int()

写入调试值时,请始终在格式化中使用
repr()
,或
%r

s = 'cl_num = %r, prev_cl_num = %r\n' % (cl_num, prev_cl_num);

浮点值上的
repr()
将其格式化,就像使用
%17g
格式化程序一样;显示17位小数,指数大于等于17时使用科学记数法。

您有浮点值,但只将整数部分写入文件:

>>> '%d' % 3.3
'3'
注意
.3
小数部分是如何被忽略的
%d
对插值调用
int()

写入调试值时,请始终在格式化中使用
repr()
,或
%r

s = 'cl_num = %r, prev_cl_num = %r\n' % (cl_num, prev_cl_num);

浮点值上的
repr()
将其格式化,就像使用
%17g
格式化程序一样;显示17位小数,指数大于等于17时使用科学记数法。

您有浮点值,但只将整数部分写入文件:

>>> '%d' % 3.3
'3'
注意
.3
小数部分是如何被忽略的
%d
对插值调用
int()

写入调试值时,请始终在格式化中使用
repr()
,或
%r

s = 'cl_num = %r, prev_cl_num = %r\n' % (cl_num, prev_cl_num);

浮点值上的
repr()
将其格式化,就像使用
%17g
格式化程序一样;显示17位小数,指数大于等于17时使用科学记数法。

您有浮点值,但只将整数部分写入文件:

>>> '%d' % 3.3
'3'
注意
.3
小数部分是如何被忽略的
%d
对插值调用
int()

写入调试值时,请始终在格式化中使用
repr()
,或
%r

s = 'cl_num = %r, prev_cl_num = %r\n' % (cl_num, prev_cl_num);


浮点值上的
repr()
将其格式化,就像使用
%17g
格式化程序一样;显示17位小数,当指数等于或大于17时使用科学记数法。

代码中的循环在哪里?循环在该代码上循环修改了什么<代码>我<代码>字数?显示的值是什么类型的?没有足够的信息来确定问题。@chepner:输出表明两个数字的整数值相等,但也会写入
指令
文本,这只会在假定两个数字相等时发生。问题是
%d
只写整数;浮点将被截断为整数,但相等性测试可能很容易失败。循环在代码中的什么位置?循环在该代码上循环修改了什么<代码>我<代码>字数?显示的值是什么类型的?没有足够的信息来确定问题。@chepner:输出表明两个数字的整数值相等,但也会写入
指令
文本,这只会在假定两个数字相等时发生。问题是
%d
只写整数;浮点将被截断为整数,但相等性测试可能很容易失败。循环在代码中的什么位置?循环在该代码上循环修改了什么<代码>我<代码>字数?显示的值是什么类型的?没有足够的信息来确定问题。@chepner:输出表明两个数字的整数值相等,但也会写入
指令
文本,这只会在假定两个数字相等时发生。问题是
%d
只写整数;浮点将被截断为整数,但相等性测试可能很容易失败。循环在代码中的什么位置?循环在该代码上循环修改了什么<代码>我<代码>字数?显示的值是什么类型的?没有足够的信息来确定问题。@chepner:输出表明两个数字的整数值相等,但也会写入
指令
文本,这只会在假定两个数字相等时发生。问题是
%d
只写整数;浮点将被截断为整数,但相等性测试可能很容易失败。可能是,如何在python中获取值的类型?@metallicprest,简单到
type(somevariable)
@metallicprest:您可以使用
type()
获取类型对象,但大多数情况下
repr()
应该清楚地显示您拥有的值的类型。可能是,如何在python中获取值的类型?@metallicprest,简单到
type(somevariable)
@metallicprest:您可以使用
type()
获取类型对象,但大多数情况下
repr()
应该清楚地显示您拥有的值的类型。可能是,如何在python中获取值的类型?@metallicprest,简单到
type(somevariable)
@metallicprest:您可以使用
type()
获取类型对象,但大多数情况下
repr()
应该让你清楚地知道你拥有什么类型的值。可能是,你如何在python中获得值的类型?@metallicprest,就像
type(somevariable)
@metallicprest:你可以使用
type()
来获得类型对象,但在大多数情况下,
repr()
应该让你清楚地知道你拥有什么类型的值。