首页
学习
活动
专区
工具
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 作用域,外层非全局作用域)变量

49230

C++入门篇

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

9510
  • 变量作用域

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

    94220

    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用法,使用了将代码放在多个文件用法,明天会更新将代码拆分放在多个文件操作

    6310

    【C++】详解命名空间

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

    10210

    Julia机器核心编程.作用域

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

    79920

    【C语言】关键字

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

    73820

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

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

    3.1K20

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

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

    27710

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

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

    22010

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

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

    41710

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

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

    49720

    c语言进阶(1)

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

    8210

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

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

    49320

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

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

    48340

    深入理解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 对象属性和行为。

    32030

    你知道Python4种变量作用域是哪些吗?

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

    2.1K10

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

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

    21.6K42
    领券