def func():
number = 1
def func2():
print number
为什么这段代码不能打印" 1"?(除了我没有调用这些函数的事实?)
答案 0 :(得分:2)
以下是我认为您正在尝试做的事情。我的魔法水晶球生锈了。
def func1():
user_input = raw_input("prompt")
return user_input
def func2(the_input):
print the_input
that_same_input = func1()
func2(that_same_input)
如果您使用的是Python3,则将input("prompt")
替换为raw_input("prompt")
,将print(the_input)
替换为print the_input
函数执行以下两项操作之一。它们要么进行计算并返回输出,要么将某些结构变为您想要的结构。如果他们做了除此之外的任何事情你应该(通常)重构。现在你正试图让你的func1
设置一个全局变量,然后从其他地方调用它。好吧,有点。
您真正要做的是使用func1
进行一组计算。您希望它获得一些用户输入,然后报告该用户输入的内容。在您的原始示例中,您尝试将其保存到变量中,但由于函数内部的变量没有全局范围,因此不适合您。让我们返回该值,并将其保存到函数OUTSIDE的变量中。
一旦我们完成了这个,我们就可以让另一个函数接受它作为PARAMETER,并将变量传递给它!看到?变异,或计算并返回。这些是你的选择。
答案 1 :(得分:2)
你回来了
def func(n):
number = n+1
return number
something = func(n)
答案 2 :(得分:0)
在number
中定义func
时,它不是全局名称;它位于func
的本地。当您致电func2
时,您在number
中定义的func
不存在。您可以创建一个新的,但它与另一个函数的number
没有任何关系。实际上,此代码将抛出NameError,因为number
中没有名为func2
的变量。
答案 3 :(得分:0)
如评论中所述,您可以使用global
关键字,这是一个简短的示例:
def func():
global number
number = 1
def func2():
print number
现在,如果在func2
来电之后调用func
,则会按照您的预期打印1。
然而,全局变量不完全是最佳做法,除非你绝对需要,否则你应该使用它们,在这种情况下,上面的代码应该有所帮助。
您还可以查看有关该主题的python docs部分:https://docs.python.org/2/faq/programming.html#why-am-i-getting-an-unboundlocalerror-when-the-variable-has-a-value,可能会有所帮助。
答案 4 :(得分:0)
为什么需要定义“number = 1”?只是做
number = 1
def func2():
print number