Python中的作用域3.6.和错误

问题描述:

下面的代码如何以None输出结果?Python中的作用域3.6.和错误

def funct(x): 
    x=7 

x=11 
x=test(x) 
print(x) 

这里是另外一个代码片段: -

def func(): 
    print (x) 
    x = 90 

x = 1 
func() 

这个输出应该是90!范围搜索为本地,封闭,全局,内置。这里x应该在这里搜索本地或全球 请解释。

+1

您的代码格式出错了。请参阅[Markdown帮助 - 代码和预格式化文本](http://*.com/editing-help#code)和[编辑]您的文章。 – Kevin

x这里是中的职能范围的全局变量,因为功能自然创建自己的命名空间,其中不包括未通过作为参数的任何外部变量。

你的代码有很多问题,包括函数调用顺序和函数内部操作的顺序;但为了尽可能最广泛地回答您的问题,为了让您访问在函数之外定义的变量,在更大的范围内,即需要引用其名称空间,在每个主体的内部加上global x功能。

阅读Python variables and scope,然后重新检查我上面提到的代码中的其他错误。

第一代码片段返回一个简单的事实,你没有从函数返回任何。您将x定义为本地参数,而不是全局变量。由于您没有返回任何值,因此您的电话测试(x)(与功能名称功能不匹配)将成为值。这在Python文档中有明确的定义。要获得本地值回你的主程序,试试这个:

test(x): 
    x = 7 
    return x 

x = 11 
x = test(x) 
print(x) 

而且,请注意,您的11初始值在主程序中完全忽略了,那你的函数忽略它给出的值。您应该缩短这个例子

func(): 
    return 7 

print(func()) 

你的第二个例子将打印的的外在价值,因为你有在这一点上定义一个局部变量X,并且功能是允许到参考全局变量。

但是,当您在接下来的分配一个值,你创建一个局部变量 - 你没有申报X是全球性的,所以你不能在主程序分配给X

同样,您不会返回任何值。因此,在主程序中,func()评估为

这是否清除发生了什么?