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

在函数中定义的全局关键字没有更新我的变量,但是为什么呢?

在函数中定义的全局关键字没有更新变量的原因是因为在函数内部,全局关键字的作用域被限制在函数内部,无法直接修改全局变量。这是因为在函数内部,变量的查找顺序是先在函数内部查找,如果找不到再去全局作用域中查找。当在函数内部使用全局关键字来定义变量时,实际上是在函数内部创建了一个新的局部变量,而不是修改全局变量。

为了在函数中更新全局变量,可以使用global关键字来声明变量为全局变量。通过在函数内部使用global关键字声明变量后,就可以在函数内部修改全局变量的值了。

以下是一个示例代码:

代码语言:txt
复制
x = 10  # 全局变量

def update_global_variable():
    global x  # 声明x为全局变量
    x = 20  # 更新全局变量x的值

print(x)  # 输出:10
update_global_variable()
print(x)  # 输出:20

在上述代码中,通过使用global关键字声明变量x为全局变量,函数update_global_variable()可以更新全局变量x的值。最终输出结果为1020

需要注意的是,在函数中频繁地使用全局变量并进行修改可能会导致代码的可读性和可维护性降低。因此,在编写代码时,建议尽量避免过多地使用全局变量,而是通过函数的参数和返回值来进行数据的传递和更新。

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

相关·内容

《Python入门07》带你了解python函数那点事儿~

点击上方的“小小白AI”,选择“关注” 重磅知识,第一时间送达 前言 在开始之前首先给大家道个歉,由于前段时间身边发生了很多事,好久没有更新了,对给大家带来的不方便,我想给大家说一声对不起。...函数的定义主要是采用def关键字,例如要定义一个输出hello word的函数: def helloword(): print(“helloword”) 当你在程序中,直接写...2、上面的函数也没有输入输出啊,当给入输入需要输出的时候怎么办呢? 在定义函数的时候可以直接定义好输出,然后再程序中采用return关键字给出输出。...,可以在程序全局使用,局部变量是指定义在函数内的变量,只能在函数内被声明使用 若内部作用域的想要修改外部作用域的变量,就要使用global关键字:参考一下代码 1、未使用global关键字 a =...关键字的使用方法和global关键字类似,修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量。

49430

C++入门篇

在我学习C++的过程中我会一直把C++博客更新下去的。 C++关键字 我们都知道C语言是有32个关键字的,那么C++会用多少关键字呢?...namespace就是命名空间 为什么要引入命名空间呢? 在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。...其实不然,在我们平时地使用下可能确实是没有什么作用的,但是一但我们开始工作后,他的作用就会显示出来,在工作的时候,公司在写一个大型项目的时候往往要很多人去写,每个人完成项目的一部分,但是每个人都会对变量起名字吧...,你想想如果你们把名字取到了相同的名字,并且那个名字在你的代码中多次运用,你们两在自己单独运行的时候都没有问题,但是项目一连起来的时候,就报错。...细心的小伙伴可能发现了,我的命名空间的用法发生了变化,这是为什么呢?

10710
  • 变量的作用域

    但是, 你看: ? ??? 什么鬼? 为什么读到了全局变量? 我还特地有到Python 3.0的环境中跑了一遍, 发现结果确实是3啊....当然, 这并没有什么问题, 但是随着时间推移, 程序的规模越来越大, 问题就出现了. 你定义了一个变量 x=2, 调用了一个系统函数之后, 回来发现x变成9了....在函数sort中的所有变量, 都加上_sort后缀, 比如变量i, 就定义为i_sort, 但无法避免另外一个sort函数, 那就在后缀再拼上一个文件名? 但如果文件名也一样呢?...如果说, 我在函数退出的时候, 把变量再改回我进来时候的样子, 不就能假装什么都没有发生吗?...再来回看一下最开始的问题, 为什么在Python 2.0中, 闭包读取到的变量是全局变量呢? 很明显, 其使用了静态作用域导致的. 那么在2.0中如何解决这个问题呢?

    94520

    C:关于static 和 extern 关键字的介绍-学习笔记

    而具有全局作用域的变量,或者在函数内部使用 static 关键字修饰的变量,其作用域通常更广,生命周期也更长,从程序开始运行一直到程序结束。...来一起看一下 欸,6个6,怎么得到的呢? 在上述代码中,test 函数内部定义的变量 a 是一个局部变量。 每次调用 test 函数时,都会为 a 分配新的内存空间,并初始化为 5 。...现在的结果变为了6 7 8 9 10 11。为什么呢? 好像这里每一次调用函数后a产生的值没有被刷新,当下一次调用的时候,会继续使用上一次留下来的值。也就是说进来的a不会再重新创建。 为什么呢?...从上面对比你知道extern的作用了吗? extern 是用来声明外部符号的,如果⼀个全局的符号在A文件中定义的,在B文件中想使用,就可以使用extern进行声明,然后使用。...结语: 本篇文章将告一段落,这篇文章主要讲了两个关键字static 和 extern的作用以及用法 同时还介绍了两个名词作用域与生命周期,在介绍static的用法中,使用了将代码放在多个文件的用法,明天会更新将代码拆分放在多个文件的操作

    11910

    【C++】详解命名空间

    在C语言中,当我们在定义全局变量时如果与包含的头文件中的库函数重名的话,这时就会出现重定义的错误,这是我们与库重命时发生的冲突。...,结果发现失败了,失败的原因是——未定义的标识符'b'; 现在大家是不是会奇怪,我明明在命名空间中定义了,为什么无法使用呢?...namespace来展开作用域 在介绍第二种使用方式前我们先来看一个例子: 可以看到,在这个例子中我们对命名空间中的函数func进行了多次的调用,但是每次都需要指定作用域名,那是不是有点麻烦呢?...但是此时的全局域中存在两个为a的变量,如果我们在对变量a进行使用时,没有指明它的所属,那么就会导致程序无法判断应该使用哪个变量a,这就是为什么系统会提示a不明确。...我知道,如果仅仅是通过文字来进行复习,大家可能没有什么感觉,下面我们通过例子来分别说明全局变量与局部变量的生命周期与作用域: 在这次的测试中我们在原先的项目test3.cpp中创建了一个全局变量m、一个函数

    12310

    Julia机器核心编程.作用域

    当我们在Julia中定义函数时,也可以在函数体内定义变量。在这种情况下,该变量在该函数的局部范围内有效,因此称为局部变量。而未在函数体内声明的变量在全局范围内有效,因此称为全局变量。...打错一个字 代码01~03行定义了一个for结构,其中声明了一个hello变量。在04行我们试图输出hello的值,但是却得到了05行的报错,报错类型是未定义变量错误,提示hello并没有被定义。...这是为什么呢? 因为对于整个程序来说,for结构属于一个局部,所以在for结构中声明的hello仅在for循环的范围内可用,在for循环的范围外不可用。...这表明该函数使用了在Utility模块中定义的name变量的值,这是因为函数tell_name()本身被定义在Utility模块中。...如果想要在函数内部使用全局声明的x,该怎么办呢?我们可以使用global关键字。 在函数内部使用全局变量 我们将函数中的x变量替换为全局的x,然后观察调用函数后结果发生了怎样的改变。 ?

    80320

    【C语言】关键字

    (可以带参数,也可不带参数)循环条件 ---- 理解变量、定义与声明 问题一:什么是变量❓ 在内存中开辟特定大小的空间,用来保存数据 关键字:内存 问题二:如何定义变量(怎么用)❓ int...那么,为什么吃饭要盘子?我想吃一口菜了,直接去锅里找不行吗?当然行,但是效率低。...局部变量具有临时性。进入代码块,自动形成局部变量,退出代码块自动 释放。[网上很多说函数中的变量是局部变量,不能说错,但说法是不准确的] //全局变量:在所有函数外定义的变量,叫做全局变量。...局部变量: 进入代码块,形成局部变量[开辟空间],退出代码块,"释放"局部变量 全局变量: 定义完成之后,程序运行的整个生命周期内,该变量一直都有效 auto 相关 //如何使用:一般在代码块中定义的变量...最名不符实的关键字 —static 全局变量和函数的两个结论 - 补充内容 全局变量,是可以跨文件,被访问的。 全局函数,是可以跨文件,被访问的。

    74820

    Javascript中的局部变量、全局变量的详解与var、let的使用区别

    第二个弹窗为什么没有成功弹出呢? 我们按F12,看一下报错内容: ? 由此可以看出 test_var3 在函数执行后是没有被定义的。...得出结论: 在函数体外使用var关键字定义的变量和在函数体内未用任何关键字声明的变量是全局变量,在函数体内使用var关键字声明的变量是局部变量。...在函数体外定义的全局变量test_var,但是在函数体内又定义了局部变量test_var ,在函数中弹出的test_var是函数体内的局部变量覆盖函数体外的全局变量的结果,当离开函数后,局部变量失效,...JavaScript中的变量有块范围吗? 在Java、C、C++等语言中,在 if块 ,循环块中定义的变量,出了该块之后将,不能继续访问。那JavaScript中是否也如此呢?...这是因为函数内有和全局变量同名的局部变量,会覆盖掉全局变量,但是let关键字声明的变量并没有提升机制,所以会报错。

    3.2K20

    C语言里面那些你必须知道的常用关键字(详细讲解)

    关键字static 静态局部变量 静态局部变量的作用域和生命周期 静态全局变量 静态函数 #define 定义常量和宏 #define 定义常量 #define 定义宏 那么宏是怎么调用的呢?...关键字static 在C语言中: static是用来修饰变量和函数的 1. 修饰局部变量-称为静态局部变量 2. 修饰全局变量-称为静态全局变量 3....并且已经完成初始化了 而没有修饰呢: 没有修饰之前必须进入函数体中初始化语句才会完成初始化。 静态局部变量的作用域和生命周期 前面我们说了静态变量是创建完成后,直到程序结束才销毁。...#define 定义宏 我们来看一下宏是怎么定义的: 和定义函数非常相识 但是宏没有函数的返回类型和参数类型 还是很不一样的,宏的实现体一般都是表达式 那么宏是怎么调用的呢?...typedef 总结一下今天学了: 关键字static 关键字static修饰变量的作用域变化 #define定义的宏和常量 关键字typedef 不知道大家掌握了没有,希望对各位铁汁有用呢

    29610

    教你快速了解C语言中的作用域和常量

    全局变量的作用域 前面介绍了全局变量的的生效范围是全局, 在不同.c文件也可以使用。 有因为我们程序是main()函数开始 出main函数结束 所以: 全局变量的作用域是整个工程。...全局变量的生命周期 由于我们全局变量的作用域是整个工程 而程序是从进入main( )函数开始,出main( )函数结束。 那么是不是可以说: 全局变量的生命周期是:整个程序的生命周期。...他说左值指定的是const的对象所以不能修改,给我们报错了 那么我问大家一个问题? 我们一直在讲变量和常量 那么由变量用const修饰的常变量可以当成常量用吗?...我们明明已经将变量 n,用const修饰成了常变量为什么他还 提示我们输入常量呢? 这说明关键字const虽然把变量n修饰成了常变量。 但是变量a本质上还是变量所以不能被当来常量使用。...你们的点赞就是博主更新最大的动力! 有问题可以评论或者私信呢秒回哦。

    23110

    【入门级】从一道面试题了解js作用域及作用域链

    全局作用域 全局作用域就是代码运行时最外围的执行环境,比如在我国,最大的范围就是全国,全国就是全局作用域,而在js中,全局作用域被认为是window对象,而在上一篇文章中我们也说到了,在全局作用域中声明的变量为全局变量...另外要说一点,在我们讲this的那一篇文章中说了,this是在函数调用时决定的,在函数被定义时并没有this。而作用域则刚好相反,作用域是在函数定义时决定的,跟函数在哪里被调用没有关系。...所以无论我们在哪里调用函数,都不会改变他的作用域链。 块作用域 上面我们说了,在es6之前,js中是没有块作用域的,在es6中,添加了let关键字实现了对块级作用域的支持。...那有的同学会说,这不是有块级作用域吗,那为什么又说没有块级作用域呢?我们又怎么区分有没有块级作用域呢?其实很简单,我们来看看代码就知道了。...答案是5个 undefined,我最开始也有点懵,为什么呢,但仔细一看其实很简单,因为setTimeout里面那个未命名函数也有自己的作用域,它接收一个参数i,其实就是在自己的作用域里定义了一个空的变量

    42910

    深入理解JS作用域链与执行上下文3

    ,为什么我们的 str = undefined ,而不是报错:未定义???...这就是变量提升(hoisting ),它是指,浏览器在遇到 JS 执行环境的 初始化,引起的变量提前定义。...图片证明,全局作用域链是在 全局执行上下文初始化时 就已经确定的:我们来做一个有趣的实验,跟刚才,按照我描述的方法,你可以找到 [[Scope]] 属性。那这个属性是在什么时候被确定的呢???...这是我的疑惑,我无法证明这个问题,但是,我更倾向于 2 的观点,如果知道如何证明请联系我。至少,《高性能JavaScript》中是这样描述的。知道作用域链有什么好处?...正如,上一节,变量提升 所论述,JS 引擎会初始化我们声明 函数 和 变量 。那么在 add(1, 2) 执行前,我们的 add 函数 [[Scope]] 内是怎样的呢???

    50020

    c语言进阶(1)

    在内存中(在程序运行时)开辟特定大小的空间,用来保存数据。所有的变量本质上都是要在内存的某个位置上开辟空间的。 为什么要定义变量?...定义与声明 定义:就是在内存中开辟特定大小的空间(只能有一次) 声明:告知,关联(可多次) 关键字 auto(局部变量默认) 变量分为局部变量和全局变量。...局部变量就是在代码块内定义的,而全局变量是在代码块内定义的,全局变量具有全局性。 作用域更多描述的是作用范围(改变量的有效范围),生命周期描述的是时间的概念,什么时候被声明,什么时候被释放。...那么在下面这个函数中,为什么show()函数未定义,程序还是能够运行成功呢?  printf是包含在库函数里的,那我们是什么时候去找printf的定义和实现的呢?是在程序最后一步实现可执行链接的时候。...那么为什么临时变量具有临时性,全局变量具有全局性呢? 欢迎交流!后续将会出2,3,4......一起学习进步!

    8410

    深入理解JS作用域链与执行上下文

    ,为什么我们的 str = undefined ,而不是报错:未定义???...这就是变量提升(hoisting ),它是指,浏览器在遇到 JS 执行环境的 初始化,引起的变量提前定义。...图片证明,全局作用域链是在 全局执行上下文初始化时 就已经确定的:我们来做一个有趣的实验,跟刚才,按照我描述的方法,你可以找到 [[Scope]] 属性。那这个属性是在什么时候被确定的呢???...这是我的疑惑,我无法证明这个问题,但是,我更倾向于 2 的观点,如果知道如何证明请联系我。至少,《高性能JavaScript》中是这样描述的。知道作用域链有什么好处?...正如,上一节,变量提升 所论述,JS 引擎会初始化我们声明 函数 和 变量 。那么在 add(1, 2) 执行前,我们的 add 函数 [[Scope]] 内是怎样的呢???

    48840

    深入理解JS作用域链与执行上下文_2023-02-23

    ,为什么我们的 str = undefined ,而不是报错:未定义???...这就是变量提升(hoisting ),它是指,浏览器在遇到 JS 执行环境的 初始化,引起的变量提前定义。...证明,全局作用域链是在 全局执行上下文初始化时 就已经确定的: 我们来做一个有趣的实验,跟刚才,按照我描述的方法,你可以找到 [[Scope]] 属性。 那这个属性是在什么时候被确定的呢???...这是我的疑惑,我无法证明这个问题,但是,我更倾向于 2 的观点,如果知道如何证明请联系我。至少,《高性能JavaScript》中是这样描述的。 知道作用域链有什么好处?...正如,上一节,变量提升 所论述,JS 引擎会初始化我们声明 函数 和 变量 。 那么在 add(1, 2) 执行前,我们的 add 函数 [[Scope]] 内是怎样的呢???

    49420

    深入理解Python变量作用域与函数闭包

    L(local)局部作用域 局部变量:包含在def关键字定义的语句块中,即在函数中定义的变量。每当函数被调用时都会创建一个新的局部作用域。...有些情况需要在函数内部定义全局变量,这时可以使用global关键字来声明变量的作用域为全局。局部变量域就像一个 栈,仅仅是暂时的存在,依赖创建该局部作用域的函数是否处于活动的状态。...变量,对于func函数来说,局部作用域中没有variable变量,所以打印时,在L层找不到,所以进一步在E层找,即在上层函数test_scopt中定义的variable,找到并输出。...在局部作用域找到了变量名,所以不会升级到嵌套作用域去寻找。但是在使用print语句将变量variable打印时,局部变量variable并有没绑定到一个内存对象(没有定义和初始化,即没有赋值)。...这里需要注意的是global关键字,使用了这个关键字之后,在nested函数中使用的spam变量就是全局作用域中的spam变量,而不会新生成一个局部作用域中的spam变量。

    1.7K60

    系统刷JavaScripit 构建前端体系(语法篇)

    时间过得好快啊,距离2021年也 只有 72天了,你还有哪些目标没有实现呢? 现在更新文章频率降低了,公司项目活紧,充电时间比较紧了,每天只好抽取晚上的几个小时来学习补充了。...块, var 的作用域范围为 函数 区别二 let 声明的变量「不会在作用域中变量提升」 区别 三 使用 var 关键字声明的变量,可以成为window的属性 使用 let 关键字声明的变量,则不可以成为...( ) : 返回对象对应的值 ❞ 作用域 函数参数 ❝在ECMAscript 中函数的参数就是局部变量 当在函数内部,重写了参数,它会变成本地对象指针,而本地对象在函数执行结束时就销毁了。...上下文决定了当前变量或者函数可以访问哪些数据,以及它们的行为 每个上下文都会关联到一个变量对象中,上下文中定义的变量和行为都会存入到这个变量对象中。...在浏览器中,它的上下文为 window 对象,并且所有通过 var定义的全局变量和函数都会成为window 对象的属性和行为。

    32130

    你知道Python中的4种变量作用域是哪些吗?

    在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。其实装饰函数,很多都是闭包。...好像并不难理解,为什么初学者会觉得闭包难以理解呢? 我解释一下,你就明白了。 一般情况下,在我们认知当中,如果一个函数结束,函数的内部所有东西都会释放掉,还给内存,局部变量都会消失。...但是闭包是一种特殊情况,如果外函数在结束的时候发现有自己的临时变量将来会在内部函数中用到,就把这个临时变量绑定给了内部函数,然后自己再结束。 你可以看下面这段代码,就构成了闭包。...关键字:global 将 局部变量 变为全局变量 关键字:nonlocal 可以在闭包函数中,引用并使用闭包外部函数的变量(非全局的噢) global好理解,这里只讲下nonlocal。...---- 在Python中,有两个内建函数,你可能用不到,但是需要掌握它们。

    2.2K10

    搞懂JavaScript全局变量与局部变量,看这篇文章就够了

    局部变量:定义在函数内部,只能在函数中使用的变量,作用范围是从函数开始到结尾,即在{}里。 在函数内声明的变量只在函数体内有定义,即为局部变量,其作用域是局部性的。...第一种声明方式:使用var关键字+变量名在函数外部声明就是全局变量,例如: var bianliang = "全局变量"; 第二种声明方式:没有使用var关键字声明,直接给变量名赋值,不管是在函数内部还是外部都是全局变量...全局对象声明全局变量 2.2 局部变量的声明 声明局部变量一定要使用var关键字,使用var关键字声明变量时,变量会自动添加到距离最近的可用环境中。...所以Javascript允许在函数的任意地方声明变量,无论在哪里声明,效果都等同于在函数顶部进行声明。怎么理解呢?...另外,声明变量最好带 var, 不应使用带 var 的链式赋值,在函数体内定义变量时,最好把变量声明放在顶部,防止出现变量没有被定义就被使用的逻辑错误。

    23.2K42
    领券