相关疑难解决方法(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万
查看次数

为什么python在解释之前将源代码编译为字节码?

为什么python在解释之前将源代码编译为字节码?

为什么不直接从源头解释?

python compiler-construction interpreter bytecode

12
推荐指数
4
解决办法
4086
查看次数

PyOpenGL和OpenGL一样快吗?

我正在尝试用Python和PyOpenGL构建一个通用的游戏引擎,但我不知道它是否值得尝试,因为我不确定Python是否能胜任这项工作......

据我所知,PyOpenGL只是OpenGL的包装器.然而,我仍然看到人们说"OpenGL更好","Python太慢".

例如,看看这个问题.大多数答案都偏向于C++.

如果他们都使用相同的技术,那么为什么一个会比另一个更好?对我而言,似乎语言并不重要,因为大部分工作都是由OpenGl /硬件完成的.我错过了什么?

c++ python opengl

3
推荐指数
1
解决办法
2366
查看次数

Python解释器实际上是如何解释程序的?

举一个示例程序:

c = 10

def myfunc():
    print(c)

myfunc()
Run Code Online (Sandbox Code Playgroud)

这按预期打印 10,但如果我们看另一个程序:


c = 10

def myfunc():
    print(c)
    c = 1


myfunc()
Run Code Online (Sandbox Code Playgroud)

它说:local variable 'c' referenced before assignment

在这里,如果 python 解释器实际上是逐行运行的,那么它不应该10在到达下一行之前打印以得出存在局部变量的结论吗?

Python 有词法分析器、分词器和解析器。它是否会遍历所有代码,在逐行执行之前对其进行解析?

这就是为什么它能够说函数下面有一个局部变量吗?

python interpreter python-internals

3
推荐指数
1
解决办法
1233
查看次数