首页 > 编程语言 >关于python中的全局变量

关于python中的全局变量

时间:2022-11-13 23:14:34浏览次数:41  
标签:语句 变量 python 局部变量 关于 全局变量 赋值

废话不多说,先上个场景考考大家:

 

请问执行代码的输出是什么?先想想,别看答案。

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

1

2

3

4

5

6

7

8

9

答案是:

b

u

g

为什么呢?先看以下场景:

定义一个全局变量a=1,函数f()内部打印a的值,如下,输出1,没问题。

 

在函数内部加上a=a+1,运行报错,125行,说局部变量a赋值前调用:

 

print语句在赋值语句上面也是一样在125行报错:

 

若加上global声明a为全局变量,则正常输出2:

 

问题来了,为何直接print(a)没问题,而添加赋值语句之后就会报错呢?

这是因为在函数内部对变量进行assignment赋值操作时,python会默认该变量是一个局部变量local variable。这与赋值语句的位置无关,在编译的时候就已经决定了。所以进行a=a+1的赋值操作时,python会认为等号"="左边的变量a为局部变量,当代码执行到函数里边时,所有的a都是局部变量,在运算等号右边的a+1时,就会发现局部变量a并没有被定义,因此报错。如果print(a)语句在赋值语句上边,结果一样,你要打印的局部变量a没有被定义。

所以回到开头:

 

 

 

 

总结:

1、全局变量可读不可直接写。

2、函数内部对变量的赋值操作会被python默认变量为局部变量,且在未执行代码前已经确定。

 

对于第一点,若全局变量是个字典或列表类型,对变量的值的修改算是写吗?如下:

 

很显然函数内部的a均为全局变量。你可能会说a是可变类型的变量,那对于不可变类型的元组呢?

 

说到底可能还是由于变量在内存中的地址自始至终没有改变:

 

 

 

 

你觉得呢?

 

标签:语句,变量,python,局部变量,关于,全局变量,赋值
From: https://www.cnblogs.com/wangyi0419/p/16887613.html

相关文章

  • python面向对象-继承
    对象继承单继承:即继承父类的属性方法 super()方法场景:既想用父类的__init__属性,又想用自己的__init__属性,如果不在子类中加这个函数,直接在子类写__init__,那么会重写父......
  • python
    importscrapyfromscrapy.spiders.crawlimportCrawlSpider,Rulefromscrapy.linkextractorsimportLinkExtractorfrom..itemsimportRentItemclassRentspid......
  • 关于TF-IDF算法
    关于TF-IDF算法TF-IDF(termfrequency–inversedocumentfrequency,词频-逆向文件频率)是一种用于信息检索(informationretrieval)与文本挖掘(textmining)的常用加权技术。TF......
  • Eclipse Python IDE安装
     一、下载JDK首先下载JDK,进入JDK官网下载最新版本的JDK并安装:https://www.oracle.com/in/java/technologies/downloads/下载最新版本与时俱进(非常建议)。选择合适的文......
  • python赋值运算符
    =  等于运算符+= 加法运算符-= 减法运算符*= 乘法运算法/= 除法运算法%=取模运算法如果可以被整除,返回0如果不能被整除,返回余数**=幂运算法f=10......
  • Python: 函数传参、默认参数
    python函数是值传递还是引用传递答案:都不是,应该是传对象或对象的引用函数参数在传递的过程中将整个对象传入,对可变对象的修改在函数外部以及内部都可以见,调用者和......
  • python字典类型
    什么是字典字典是由多个键(key)及其对应的值(value)所组成的一种数据类型a=dict()a={}person={'name':'qjb','age':33}字典支持的数据类型key支持字符串......
  • 极客编程python入门-调用函数
    调用函数Python内置了很多有用的函数,我们可以直接调用。要调用一个函数,需要知道函数的名称和参数a=abs(100.123)print(a)a=abs(-123)print(a)a=abs(-123.123)print(a......
  • Python_字符串常用操作
    string.count(str)统计str在string中出现的次数s="一花一木一世界"print(s.count("一"))  string.replace(old_str,new_str)将string中的old_str替换为ne......
  • 【Python】第4章-8 求分数序列前N项和
    本题要求编写程序,计算序列2/1+3/2+5/3+8/5+...的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。输入格式:输入在一行中给出......