创建网站的向导和模板 信息技术教资面试,网站建设计划表模板,做网站的电脑需要什么配置,如何seo网站挣钱在Python中使用“global”关键字我从阅读文档中了解到#xff0c;Python有一个单独的函数命名空间#xff0c;如果我想在该函数中使用全局变量#xff0c;我需要使用global。我正在使用Python 2.7#xff0c;我尝试了这个小测试 sub [0, 0, 0, 0]…在Python中使用“global”关键字我从阅读文档中了解到Python有一个单独的函数命名空间如果我想在该函数中使用全局变量我需要使用global。我正在使用Python 2.7我尝试了这个小测试 sub [0, 0, 0, 0] def getJoin():... return ..join(sub)... getJoin()0.0.0.0即使没有global似乎事情仍然正常。我能够毫无问题地访问全局变量。我错过了什么吗 另外以下是来自Python文档全局声明中列出的名称 不得被定义为正式的 参数或for循环控制 目标类定义功能 定义或导入语句。虽然形式参数和类定义对我有意义但我无法理解for循环控制目标和函数定义的限制。10个解决方案328 votes关键字global仅对在本地上下文中更改或创建全局变量很有用尽管创建全局变量很少被认为是一个很好的解决方案。def bob():me locally defined # Defined only in local contextprint mebob()print me # Asking for a global variable以上将给你locally definedTraceback (most recent call last):File file.py, line 9, in print meNameError: name me is not defined如果使用global语句则变量将在函数范围“可用”之外有效地成为全局变量。def bob():global meme locally defined # Defined locally but declared as globalprint mebob()print me # Asking for a global variable所以上面的代码会给你locally definedlocally defined此外由于python的性质您还可以使用global在本地上下文中声明函数类或其他对象。 虽然我会反对它因为如果出现问题或需要调试它会导致噩梦。unode answered 2019-02-17T23:11:32Z192 votes虽然您可以在不使用sub关键字的情况下访问全局变量但如果要修改它们则必须使用global关键字。 例如foo 1def test():foo 2 # new local foodef blub():global foofoo 3 # changes the value of the global foo在您的情况下您只需访问列表sub。Ivo Wetzel answered 2019-02-17T23:12:03Z66 votes这是访问名称和在范围内绑定它之间的区别。如果您只是查找变量来读取其值则可以访问全局和本地范围。但是如果您为名称不在本地范围内的变量分配则将该名称绑定到此范围(如果该名称也作为全局存在则会隐藏该名称)。如果您希望能够分配全局名称则需要告诉解析器使用全局名称而不是绑定新的本地名称 - 这就是global关键字的作用。绑定块中的任何位置都会导致该块中的所有名称都被绑定这可能会导致一些相当奇怪的后果(例如UnboundLocalError突然出现在以前工作的代码中)。 a 1 def p():print(a) # accessing global scope, no binding going on def q():a 3 # binding a name in local scope - hiding globalprint(a) def r():print(a) # fail - a is bound to local scope, but not assigned yeta 4 p()1 q()3 r()Traceback (most recent call last):File , line 1, in r()File , line 2, in rprint(a) # fail - a is bound to local scope, but not assigned yetUnboundLocalError: local variable a referenced before assignmentpycruft answered 2019-02-17T23:12:54Z47 votes其他答案回答了你的问题。 关于Python中名称的另一个重要事项是它们在每个范围的基础上是本地的或全局的。考虑一下例如value 42def doit():print valuevalue 0doit()print value您可能猜测value语句将分配给局部变量而不会影响在value函数外声明的同一变量的值。 您可能会更惊讶地发现上面的代码无法运行。 函数内部的语句print value生成UnboundLocalError.原因是Python注意到在函数的其他地方您指定了名称value并且value也没有声明为global。这使它成为局部变量。 但是当您尝试打印它时尚未定义本地名称。 在这种情况下Python不会像其他语言那样回归到将名称作为全局变量查找。 实际上如果在函数中的任何位置定义了同名的局部变量则无法访问全局变量。kindall answered 2019-02-17T23:13:40Z12 votes访问名称和分配名称是不同的。 在您的情况下您只是访问一个名称。如果分配给函数中的变量则假定该变量是本地变量除非您将其声明为全局变量。 如果没有则假定它是全球性的。 x 1 # global def foo():print x # accessing it, it is global foo()1 def foo():x 2 # local xprint x x # global x1 foo() # prints local x2user225312 answered 2019-02-17T23:14:12Z6 votes您可以访问不含关键字global的全局关键字为了能够修改它们您需要明确声明关键字是全局的。 否则关键字将在本地范围内声明。例words [...]def contains (word):global words # return (word in words)def add (word):global words # must specify that were working with a global keywordif word not in words:words [word]martynas answered 2019-02-17T23:14:46Z2 votes在函数外部声明的任何变量都假定为全局变量只有在从函数内部(构造函数除外)声明它们时才必须指定该变量是全局变量。Jesus Ramos answered 2019-02-17T23:15:11Z0 votes这意味着您不应该执行以下操作x 1def myfunc():global x# formal parameterdef localfunction(x):return x1# import statementimport os.path as x# for loop control targetfor x in range(10):print x# class definitionclass x(object):def __init__(self):pass#function definitiondef x():print Im badikostia answered 2019-02-17T23:15:37Z0 votes全球使变量“全球”def out():global xx 1print(x)returnout()print (x)这使得x就像函数外的正常变量一样。 如果你取出全局那么它会产生错误因为它无法在函数内打印变量。def out():# Taking out the global will give you an error since the variable x is no longer global or in other words: accessible for other commandsx 1print(x)returnout()print (x)Michael answered 2019-02-17T23:16:09Z0 votes我会举个简单的例子想想这段代码myVar 0print (myVar ) # 01 line: returns 0def func():myVar defprint (myVar )func() # 02 line: returns defprint (myVar ) # 03 line: returns 0正如你所看到的最后一行代码将返回0因为在函数内部myVar变量没有被重新分配它只是被修改了它只会在调用函数时改变而不影响主myVar变量因为它在里面定义了 我们的函数(意思是它是局部变量)但是使用全局关键字myVar 0print (myVar ) # 01 Line : returns 0def func():global myVarmyVar defprint (myVar )func() # 02 Line : returns defprint (myVar ) # 03 Line : returns def我们实际上命令pythondef中的这个变量不是本地的使用名为myVar的全局变量来改变它。a_m_dev answered 2019-02-17T23:16:48Z