Python全局变量和局部变量(超详细,纯干货,保姆级教学)

这篇具有很好参考价值的文章主要介绍了Python全局变量和局部变量(超详细,纯干货,保姆级教学)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

全局变量定义:

                        在函数外部定义的变量。所有函数内部都可以使用这个变量。

局部变量定义:

                        在函数内部定义的变量。这个变量只能在定义这个变量的函数内部使用。

第一种:global定义全局变量在自定义函数内部

定义看起来一愣一愣的,没关系我也是。我将会用实例的方式为你解释。我们也知道在Python中有一个global关键字用来声明一个全局变量。那这玩意儿到底什么用。来看看

def first():
    global key
    key="first()的key"
    print("进入first函数,给key赋新值,此时print(key)得到***"+key+"***\n")
def second():
    print("进入second函数,但是没有给key赋新值,此时print(key)得到***"+key+"***\n")
def third():
    key="third()的key"
    print("进入third函数,给key赋新值,此时print(key)得到***"+key+"***\n")

first()
second()
third()
print(key)

******最后的到运行结果如下******

Python全局变量和局部变量(超详细,纯干货,保姆级教学)

结论:上面例子说明了 global 定义 全局变量,就是用在  自定义函数  内部,用于告诉python这是一个  全局变量  .作用跟在  全局作用域  里写下一个  全局变量a  是一样一样的效果

(注意,我可没在全局定义key,但是可以打印出来,这说明了什么???严格证明了结论嘛)

                 **********************分割线***************************

第二种:全局定义全局变量,并给其赋值。

(注:在全局内写“key="值"相当于在全局内写“global key

                                                                           key="值"”)

key="全局内定义,并赋值的全局变量key"

def first():
    key="first()局部新定义的“全局key“"
    print("进入first函数,key的值为***"+key+"***\n")
def second():
    print("进入second函数,在second函数内部,不赋给key新值,引用first()函数后的key为***"+key+"***\n")


print("没有引用first()函数时的key为***"+key+"***\n")#为了先print出key的全局内定义的 全局变量值

first()#first()函数内部对全局内定义的 全局变量key 进行了赋值。实质上是在first()内部定义了一个局部变量

second()#验证这个 first()内部定义的局部变量会不会影响到second()中的key。(就像第一种global key那样。结论当然是否定的。但我们这里验证一下,消除一下读者的疑问)

print("引用first()函数后的key为***"+key+"***\n")#验证在 first()定义了一个局部变量之后,会不会影响到全局内的全局变量key。(答案当然也是否定的,这里这一步也是为了消除读者的疑问)

********运行结果如下********

Python全局变量和局部变量(超详细,纯干货,保姆级教学)

 可见,以上例子中。first()内定义了一个局部变量,然后出了这个first()函数以后,这个变量便消失,不可再用。同时也体现了“局部变量>全局变量”的优先级关系。

结论:在全局 定义 全局变量 key 后,自定义函数 内部 再对这个  key 进行定义 的时候,就是定义了 key局部变量,出了这个 自定义函数,便不可再用。下一个自定义函数 只能用 全局变量key 了。

                 **********************分割线***************************

第三种:前两种的混用

def first():
    key="first()局部新定义的\"局部变量\"key"
    print("进入first函数,key的值为***"+key+"***\n")
def second():
    print("进入second函数,在second函数内部,不赋给key新值,引用first()函数后的key为***"+key+"***\n")
def third():
    global key
    key="third()定义的全局通用(即全局变量)global key"
    print("进入third函数,在third函数内部,赋给key新值,且为global,引用third()后的key为***"+key+"***\n")


key="全局内定义,并赋值的全局变量key"
print("没有引用first()函数时的key为***"+key+"***\n")#与第二种的这个位置的作用一样
first()#与第二种的这个位置的作用一样
second()#与第二种的这个位置的作用一样

third()#由于我们给third()内部定义了一个global key,探测一下等下再调用third()的时候,我们的全局key会不会改变为third()中的key值。即 第一种 的结论。(当然哈,肯定是会的,证明见下一步)


print("引用third()函数后的,全局内的key为***"+key+"***\n")#探测一下global key会不会影响 全局内的key(答案是会影响,因为我们第一种说过。在局部变量里面global key相当于在全局作用域里直接写一个key一样的效果。)

********运行结果如下********

Python全局变量和局部变量(超详细,纯干货,保姆级教学)

OK,现在严格证明了结论一和结论二.

第四种.深入的了解一下.(必看!!!!!!!!!)

c语言大家都学过吧,没学过也没关系.你回想一下,我们写的第一个hello world程序是不是下面这样

#include<stdio.h>
int main()
{
    printf("hello world");
}

注意到没有,我们写的第一个c语言程序就是在main()函数内部写的,根据定义,在函数内部写的就是局部变量,当然main()函数也是函数.

然而我们在python中写的第一个hello world是

print("hello world")

这个python的hello world是在哪里写的?没错,在全局作用域里面.而不是在函数内部写的.

根据上面的我说过的

局部变量与全局变量的理解方法


a=1

def good():         #定义一个good函数,自定义函数内部的是局部变量
    a=2             #局部变量a=2
    print(a)        #print结果是2
good()              #调用good()函数
print(a)            #print结果是1

解释:

    在全局作用域中定义了一个全局变量a并赋值为1

    后来定义了一个good()函数,作用是给局部变量赋值为2,并print这个a

    然后调用这个good()函数:

              理解一下.这个名字为a的变量在good()函数中,变量a被自定义函数内部的a=2给赋了一个新的值2,所以a的值由1变成了2.然后执行了print()功能.最后这个函数是不是就调用完成了,然后python就把这个函数的局部变量(也就是a=2)的内存释放(其实也会将参数释放掉,但是我这个函数没有写参数)掉了...所以全局变量a的值又恢复为了1.(最好这样理解,帮你记得更清晰一点,你就按我这样理解)

其实别总是死记硬背什么"在自定义函数内部优先级:局部变量>全局变量"这些全是二级结论,你要懂得本质.为什么在自定义函数内部有这样的优先级?其实不就是因为程序运行到自定义函数内部了,又遇到了同名的变量,然后给这个变量又赋了一个新值嘛..这和你在全局作用域内见到

a=1
a=2

不是一样的嘛...全局变量a先被赋值为了1,之后程序运行到了第二行,遇到了同名的变量a,并给他赋了一个新值为2.这个逻辑其实和我上面紫色标记的内容一样嘛.编程内部逻辑不难,重要的是要理解..然后第二个二级结论就是.局部变量不可以改变全局变量,,为什么?我接着上面紫色标记的内容继续说,其实不就是因为,这个自定义函数调用完之后,他的局部变量被释放掉了嘛.所以,局部变量影响不了全局变量.把上面蓝色标记的内容好好看看,你品,你细品.全局变量,局部变量,听着可高级是吧,其实就是名字听着nb一点,但本质都是一群小趴菜,微不足道,轻轻松松好吧...

为什么要有global?

你想想啊,如果函数内部的局部变量不能改变全局变量肯定是不行的吧,因为总会有情况需要的..

so,这时候global就来了.他的作用是什么呢?是为了告诉python解释器说,我在自定义函数内部global a,相当于在全局作用域里面写一个全局变量a...因此呢,不就可以实现在自定义函数内部也可以改变全局变量的作用啦吗?

兄弟们,好好看看我新更新的内容,你一定受益匪浅!!!!!!!!!!

(如有不足或错误,敬请指正)文章来源地址https://www.toymoban.com/news/detail-453482.html

到了这里,关于Python全局变量和局部变量(超详细,纯干货,保姆级教学)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python学习笔记(四):函数的定义、函数的返回值、None类型、函数说明文档、函数的嵌套调用、局部变量、全局变量、global关键字

    目录 一、函数介绍 1. 函数是: 2. 使用函数的好处是: 二、函数的定义: 三、函数的参数 1.传入参数的功能是: 2.函数的传入参数 - 传参定义 3.注意事项: 4.练习:测量体温 四、函数的返回值 1.函数返回值的定义 2.None类型 五、函数说明文档 六、函数的嵌套调用 七、变量的

    2024年02月05日
    浏览(66)
  • Golang 局部变量、全局变量 声明

    四种声明方式 + 多变量声明: 全局变量的声明和局部变量的声明方式一、二、三 相同; 但是不能使用局部变量声明方式四 (:=) 来声明全局变量。

    2024年02月13日
    浏览(37)
  • Java成员变量(全局变量)和局部变量

    在Java中变量类型有 成员变量 、 局部变量 和 静态变量(类变量、static变量) ,本篇文章主要介绍成员变量(全局变量)和局部变量的区别。 根据变量的作用范围,将程序中的变量分为成员变量(全局变量)和局部变量。 一、成员变量(全局变量) 成员变量(全局变量):

    2024年02月04日
    浏览(42)
  • Python进阶(一)名字空间 | 超详细名字空间解析 内置 全局 局部 调试查看

    在Python中,名字空间(Namespace)是一个用于存储变量名称和它们对应的对象值的容器。名字空间可以看作是一个映射,将变量名映射到相应的对象值。比如申明一个变量a=1,那么在名字空间字典中就会增加一个映射 ‘a’ : ‘1’ Python中有几种不同类型的名字空间,主要包括以

    2024年01月20日
    浏览(39)
  • c语言全局变量和局部变量问题汇总

    ✅作者简介:嵌入式领域优质创作者,博客专家 ✨个人主页:咸鱼弟 🔥系列专栏:单片机设计专栏  1、static的作用是什么?  定义静态变量  2、static有什么用途?(请至少说明两种)  1).限制变量的作用域(在程序的整个运行期间都不释放)  2).设置变量的存储域(存

    2024年02月06日
    浏览(42)
  • C语言——局部和全局变量

    局部变量 定义在函数内部的变量称为局部变量(Local Variable) 局部变量的作用域(作用范围)仅限于函数内部, 离开该函数后是无效的 离开该函数后,局部变量自动释放 示例代码: 全局变量 在所有函数外部定义的变量称为全局变量(Global Variable),它的作用域默认是整个程

    2024年02月10日
    浏览(40)
  • 变量的存储类型(全局,局部,静态,动态)

    存储类型 是指变在内存中的存储方式,有静态存储和动态存储方式。 1.静态存储方式 静态存储方式的变量存储在内存的静态区,在程序编译时就已经分配好了内存空间。在整个程序运行时,该变量一直占有固有的内存空间,程序结束后才释放该部分内存空间。其中静态局部

    2024年02月03日
    浏览(43)
  • 【C语言趣味教程】(6) 作用域:局部变量 | 全局变量 | 局部变量优先原则 | 利用大括号限制作用域 | 变量的生命周期

        🔗 【C语言趣味教程】专栏介绍👈 猛戳了解!!! 0x00 引入:什么是作用域? 变量和常量在程序中都是有作用范围的,这个范围我们称之为变量的  作用域 (scope) 。 作用域也称为 \\\"定义域\\\",是程序中 定义的变量所存在的区域,出了该区域变量就不能被访问。 变量的作

    2024年02月14日
    浏览(51)
  • Java中的全局变量和局部变量(看这篇就够了)

    在Java中,全局变量和局部变量是两种不同作用域的变量。 全局变量(成员变量) : 在类中定义的变量称为成员变量,也叫全局变量。它们的作用域是整个类,在类的任何地方都可以被访问。 如果没有显式地初始化,它们会有默认值。 全局变量可以是基本数据类型(如int、

    2024年02月04日
    浏览(45)
  • FPGA设计Verilog基础之Verilog全局变量和局部变量定义

    注意:后续技术分享,第一时间更新,以及更多更及时的技术资讯和学习技术资料 ,将在公众号 CTO Plus 发布,请关注公众号: CTO Plus   在Verilog中,变量可以分为全局变量和局部变量两种类型。全局变量在整个模块中都可以使用,而局部变量只能在某个特定的代码块中使用。

    2024年02月15日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包