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

46430

变量作用域

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

92420

Julia机器核心编程.作用域

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

77720

【C语言】关键字

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

70320

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

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

3K20

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

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

19410

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

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

38010

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

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

17910

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

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

48020

c语言进阶(1)

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

6010

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

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

46320

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

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

45140

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

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

1.6K60

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

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

29430

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

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

18.3K41

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

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

2K10

面试官:谈谈你对 this 指向理解

但是这里this为什么不是指向window,如果按照上面的理论,最终this指向是调用它对象,这里先说个而外话,window是js全局对象,我们创建变量实际上是给window添加属性,所以这里可以用...但是同样this并没有执行它,那你肯定会说一开始说那些不就都是错误吗?...情况1:如果一个函数中有this,但是没有被上一级对象所调用,那么this指向就是window,这里需要说明js严格版this指向不是window,但是我们这里不探讨严格版问题,你想了解可以自行上网查找...,也就是看它执行时候是谁调用,例子4虽然函数fn是被对象b所引用,但是将fn赋值给变量j时候并没有执行所以最终指向是window,这和例子3是不一样,例子3是直接执行了fn。...alert( this.age ) } } obj.say(); // undefined 因为obj对象不能产生作用域,所以箭头函数相当于定义全局作用域,this指向全局

67210

《Python基础教程》第六章--读书

为什么要改变参数 使用函数改变数据结构(比如列表或字典)是一种将程序抽象化好方法。 关键字参数和默认值 目前为止,我们使用参数都是位置参数,因为它们位置很重要,事实上比它们名字更重要。...为什么会这样? 位置参数和关键字参数混合使用情况,位置参数是要放在关键字参数之前。这里,不是这个原因。...记得JS时,也有类似知识点,会逐步向上搜索作用域链变量值。 那么该怎么达成效果?怎么避免被屏蔽?使用globals函数获取全局变量值!...因为x作为形参,是局部变量,而函数里通过global又定义x是全局变量,因此出现了错误提示错误。 嵌套作用域(闭包) python函数是可以嵌套,也就是说可以将一个函数放在另一个里面。...外部作用域变量一般是不能进行重新绑定但是python3,nonlocal关键字被引入。它和global关键字使用方式类似,可以让用户对外部作用域(但并非全局作用域)变量进行赋值。

69510

理解JavaScript闭包

出于种种原因,我们有时候需要得到函数局部变量但是,前面已经说过了,正常情况下,这是办不到,只有通过变通方法才能实现。 那就是函数内部,再定义一个函数。...各种专业文献上“闭包”(closure)定义非常抽象,很难看懂。理解是,闭包就是能够读取其他函数内部变量函数。...它一共运行了两次,第一次值是999,第二次值是1000。这证明了,函数f1局部变量n一直保存在内存,并没有f1调用后被自动清除。 为什么会这样?...这段代码另一个值得注意地方,就是“nAdd=function(){n+=1}”这一行,首先在nAdd前面没有使用var关键字,因此 nAdd是一个全局变量,而不是局部变量。...0,0 真是奇怪,为什么?

50920
领券