我在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()
答案 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
中声明,因此之后被丢弃。