相关疑难解决方法(0)

我该如何理解dis.dis的输出?

我想了解如何使用dis(Python字节码的解析器).具体来说,如何解释dis.dis(或dis.disassemble)的输出?

.

这是一个非常具体的例子(在Python 2.7.3中):

dis.dis("heapq.nsmallest(d,3)")

      0 BUILD_SET             24933
      3 JUMP_IF_TRUE_OR_POP   11889
      6 JUMP_FORWARD          28019 (to 28028)
      9 STORE_GLOBAL          27756 (27756)
     12 LOAD_NAME             29811 (29811)
     15 STORE_SLICE+0  
     16 LOAD_CONST            13100 (13100)
     19 STORE_SLICE+1
Run Code Online (Sandbox Code Playgroud)

我看到JUMP_IF_TRUE_OR_POP等等是字节码指令(虽然有趣的是,BUILD_SET这个列表中没有出现,但我希望它可以工作BUILD_TUPLE).我认为右边的数字是内存分配,左边的数字是转到数字......我注意到它们每次几乎增加3(但不完全).

如果我dis.dis("heapq.nsmallest(d,3)")在函数内部换行:

def f_heapq_nsmallest(d,n):
    return heapq.nsmallest(d,n)

dis.dis("f_heapq(d,3)")

      0 BUILD_TUPLE            26719
      3 LOAD_NAME              28769 (28769)
      6 JUMP_ABSOLUTE          25640
      9 <44>                                      # what is <44> ?  
     10 DELETE_SLICE+1 
     11 STORE_SLICE+1 
Run Code Online (Sandbox Code Playgroud)

python python-2.7

62
推荐指数
2
解决办法
1万
查看次数

elif与else if; 是一个比另一个快,看着python程序集

这两个代码片段是完全相同的(就像它们在c ++中一样)还是会产生稍微不同的运行时间?

第一)

x = 'hello joe'

if x == 'hello':
  print('nope')
elif x == 'hello joe':
  print(x)
Run Code Online (Sandbox Code Playgroud)

第二)

x = 'hello jo'

if x == 'hello':
  print('nope')
else:
  if x == 'hello joe':
    print(x)
Run Code Online (Sandbox Code Playgroud)

我想找出自己,但我不确定如何实时观看这个代码以汇编形式运行.这让我想到了第二个问题:我如何看到编译Python程序时编译的汇编指令?

python conditional

2
推荐指数
1
解决办法
76
查看次数

标签 统计

python ×2

conditional ×1

python-2.7 ×1