python - Python 3 有什么原因会执行一条语句两次吗?

标签 python pdb statements

我有一个功能:

def turn(self, keyEvent):

    if (keyEvent.key == pygame.locals.K_UP) and \
       (self.body[0].direction != Directions.DOWN):
        self._pivotPoints.append(PivotPoint(self.body[0].location, \
        Directions.UP))
        print("Placing pivot point up")

    #elif chain for the down left and right button presses omitted
    #code is the same for each input

创建以下类的实例:

class PivotPoint:
    def __init__(self, location, \
                 direction):
        """When a body part reaches a pivot point, it changes directions"""
        pdb.set_trace()
        self.location = location
        self.direction = direction

当我运行此代码时,pdb 启动,并且我得到以下 I/O 序列:

> /home/ryan/Snake/snake.py(50)__init__()
-> self.location = location
(Pdb) step
> /home/ryan/Snake/snake.py(51)__init__()
-> self.direction = direction
(Pdb) step
--Return--
> /home/ryan/Snake/snake.py(51)__init__()->None
-> self.direction = direction
(Pdb) step
> /home/ryan/Snake/snake.py(89)turn()
-> print("Placing pivot point right")

第 51 行的语句被执行了两次。为什么会这样?

最佳答案

该行不会再次执行。

> /home/ryan/Snake/snake.py(51)__init__()->None

这意味着:这是函数的返回点,因为您没有添加 return (因为 __init__ 方法无论如何都应该只返回 None)。

如果你检查字节码,它会在末尾显示类似的内容:

         28 LOAD_CONST               1 (None) 
         31 RETURN_VALUE

意味着即使未指定,该函数实际上也会返回None

因此,pdb 告诉您该函数正在返回其调用者,并且它将显示该函数的最后一行来表示这一点。

关于python - Python 3 有什么原因会执行一条语句两次吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16126752/

相关文章:

python - Django有没有和Rails的测试工具媲美的BDD测试工具?

python - 使用 python psychopg2 获取数据库中包含特定字符串的所有变量的计数

python - 在Python中使用pdb以编程方式添加断点

sql - 如何在 AWS Athena 中编写多个 SQL 语句,如 CREATE 表(使用 CLI 命令 - aws athena start-query-execution --query-string {value} )?

sql - sql中的IF/ELSE语句

python - 为什么 pandas.DataFrame.update 会更改更新数据框的数据类型?

python - 如何解压元素列表

python - 我可以让 pdb 立即开始调试吗?

python - pyqtgraph 与 pdb 一起使用时的怪异

javascript - 以下 Javascript 语句返回什么?为什么?