首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我在python上全局声明之前得到了“变量赋值”?

在Python中,当我们在函数内部对一个变量进行赋值时,Python会默认将该变量视为局部变量。这意味着该变量只在该函数的作用域内有效,而在函数外部是无法访问的。

然而,如果我们在函数内部使用了global关键字对一个变量进行声明,Python会将该变量视为全局变量。这意味着该变量在整个程序中都是可见和可访问的。

现在来解释为什么在全局声明之前会得到"变量赋值"的错误。这是因为在Python中,当我们尝试对一个变量进行赋值时,Python会首先在当前作用域内查找该变量。如果找到了该变量,Python会执行赋值操作;如果没有找到该变量,则会抛出"变量赋值"的错误。

在你提到的情况下,出现"变量赋值"的错误是因为在全局声明之前,Python将该变量视为局部变量并进行了赋值操作。但是在全局声明之后,Python又将该变量视为全局变量,此时再次赋值就不会报错。

为了避免这种错误,我们应该在函数内部使用全局变量时,在使用之前先进行全局声明。这样Python就会将该变量视为全局变量,而不会在局部作用域中进行赋值操作。

总结一下,在Python中,如果我们在函数内部对一个变量进行赋值操作,需要在使用之前先进行全局声明,以确保该变量被视为全局变量。否则,在全局声明之前的赋值操作会被视为对局部变量的赋值,导致"变量赋值"的错误。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Python学习笔记整理(十二)

一、函数基础 函数可以计算出一个返回值。作用:最大化代码重用,最小化代码冗余,流程的分解 1、函数相关的语句和表达式 语句        例子 Calls        myfunc(‘diege','eggs',meat=lit) #使用函数 def,return,yield      def adder(a,b=1,*c):                           return a+b+c[0] global        changer():                 global x;x='new' lambda        Funcs=[lambad x:x**2,lambad x:x*3] 2、编写函数 def是可执行的代码,实时执行的,Python中所有语句都是实时执行的,if,while,def可嵌套,可以出现在任何地方,但往往包含在模块文件中, 并早模块导入时运行,函数还可以通过嵌套到if语句中去实现不同的函数定义。 def创建了一个对象并将其赋值给某一个变量名。 return将一个结果对象发送给调用者。 函数是通过赋值(对象引用)传递的。

02

python函数作用域简介

1.定义:函数中变量取值的地方; 2.函数中的变量名除了特殊声明为全局变量或本地变量,否则均为局部变量; 3.变量的作用域解析原则:LEGB原则,即: 变量名引进分为三个作用域进行查找,首先是本地,再是函数内(如果存在),之后才是全局变量,最后是内置作用域(内置作用域:内置函数所在模块的范围); 在默认情况下,变量名赋值会创建或者改变本地已有的变量; 全局声明或非本地变量声明会将赋值的变量名映射到模块文件的内部作用域; LEGB机制: Python搜索的四个作用域,最先是本地作用域(L);之后是上一层结构中的def所在作用域(E,函数嵌套才会出现),再是全局作用域(G),最后才是内置作用域(B) Python会在第一处能够找到这个变量名的位置停下来,如果python在此次搜索中没有找到该变量,会报错;(即未定义)

04
领券