簡體   English   中英

Python將相等值解釋為不相等

[英]Python interpreting equal values as non-equal

對於這部分代碼,它位於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_num等於prev_cl_num ,條件cl_num != prev_cl_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或更高時,將使用科學計數法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM