pdg中的参数值

时间:2017-04-19 09:32:37

标签: python debugging

我在python上创建了一个简单的函数,并使用调试器进行一些测试,看看它是如何工作的。

我想打印变量(raiz)的值:

(dbg) p raiz

但它说它没有定义。为什么是这样?这是我的代码:

import math
def funcion(sen):
    raiz = math.sqrt(sen)
    return "the sqrt of " + repr(sen) + 'is ' + repr(raiz)

print (funcion(38))

import pudb;
pudb.set_trace()

2 个答案:

答案 0 :(得分:1)

您的变量是在函数内部声明的,而不是在函数外部,因此代码无法看到它。

如果您需要为外部变量设置值,请使用global关键字标记(这是一种不好的做法):

import math

raiz = None

def funcion(sen):
    nonlocal raiz
    raiz = math.sqrt(sen)
    return "the sqrt of " + repr(sen) + 'is ' + repr(raiz)

funcion(38)
print (raiz)

此外,您可以使用nonlocal关键字,但在这种情况下,它会失败:

SyntaxError: no binding for nonlocal 'raiz' found

您可以找到有关本地,非本地和全球关键字here的教程。

答案 1 :(得分:0)

这与Scope.

有关

定义变量的位置很重要,在某些地方定义它们会导致它们在其他地方消失。这是一个例子:

# PLEASE NOTE: This code will fail.
a = "Hello"

def my_func():
   b = "Hello" # Declare a variable 'b', but only in this scope, in other words this function.

my_func()

print(a) # Works, since a is in the same scope.
print(b) # Fails, since b was defined inside a different scope, and discarded later.

因为在您的示例中,raiz在函数funcion内声明,所以Python在调用funcion后将其丢弃。如果你把这行:

raiz = 0

在函数定义之前,函数只是更新变量,因此没有问题,因为范围与print语句出现的位置相同。

tl; dr :变量raiz仅在funcion中声明,因此之后被丢弃。