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

变量不更新外部函数

是指在某些编程语言中,当在一个函数内部定义一个变量并对其进行修改时,这个修改不会影响到外部函数中相同名称的变量。

这种行为是由于变量的作用域所导致的。作用域是指变量在程序中可见和可访问的范围。在大多数编程语言中,变量的作用域可以分为局部作用域和全局作用域。

局部作用域是指变量只在定义它的函数内部可见和可访问。当在函数内部定义一个变量时,它只能在该函数内部使用,无法被外部函数或其他函数访问到。因此,如果在函数内部修改了这个变量的值,不会影响到外部函数中相同名称的变量。

举例来说,假设有以下代码:

代码语言:txt
复制
def outer_function():
    x = 10
    
    def inner_function():
        x = 20
        print("Inner function: ", x)
    
    inner_function()
    print("Outer function: ", x)

outer_function()

输出结果为:

代码语言:txt
复制
Inner function: 20
Outer function: 10

在上述代码中,outer_function内部定义了一个变量x并赋值为10。然后,在outer_function内部又定义了一个嵌套函数inner_function,并在其中定义了一个同名变量x并赋值为20。当调用inner_function时,会打印出Inner function: 20,表明在inner_function内部的x变量的值为20。然而,在outer_function中打印x的值时,输出结果为Outer function: 10,表明在outer_function内部的x变量的值没有被inner_function的修改所影响。

需要注意的是,如果希望在内部函数中修改外部函数中的变量,可以使用nonlocal关键字。例如:

代码语言:txt
复制
def outer_function():
    x = 10
    
    def inner_function():
        nonlocal x
        x = 20
        print("Inner function: ", x)
    
    inner_function()
    print("Outer function: ", x)

outer_function()

输出结果为:

代码语言:txt
复制
Inner function: 20
Outer function: 20

在上述修改后的代码中,通过在inner_function中使用nonlocal x语句,将x声明为非局部变量,这样在修改x的值时会影响到外部函数中的同名变量。因此,当调用outer_function时,输出结果为Inner function: 20Outer function: 20,表明inner_function中对x的修改成功影响到了外部函数中的x变量。

总结起来,变量不更新外部函数是由于变量作用域的限制所导致的。在大多数编程语言中,变量的作用域可以分为局部作用域和全局作用域。当在函数内部定义一个变量时,它只能在该函数内部使用,无法被外部函数或其他函数访问到。因此,在函数内部对变量进行修改不会影响到外部函数中相同名称的变量。如果需要在内部函数中修改外部函数中的变量,可以使用nonlocal关键字。

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

相关·内容

c语言局部变量、全局变量、静态变量、内部函数外部函数、声明、定义、extern作用总结

2.全局变量函数之外定义的变量称为全局变量,也称为外部变量,其作用域为从定义变量的位置开始到本源文件结束。...说明: (1)在程序执行整个过程中都占用存储单元,如果静态变量在定义时初始化,其值都为0或“\0”。 5.变量存储类别 在c语言中,每一个变量函数都是有两个属性:数据类型和数据的存储类别。...(auto),如形参等,在程序中推荐使用,也是使用最多的一个变量 (2)静态局部变量(格式:static):   使用关键字static来定义,在函数调用完释放空间,在下次调用时,还保留上一次的值。...(3)在外部变量前面加static修饰符,可将外部变量限制在本文件中。这里有一个坑,如果变量为static全局变量,在函数内不能扩张其作用域,必须在函数外声明以达扩张效果(包括主函数)。...(4)外部变量和局部变量都只能定义一次,但外部变量可以声明多次,而局部变量不能有声明。 (5)所谓变量的声明,只是把作用域扩张到声明处以下,仅仅而已,而且只有这一种声明方法。

3.3K82

【JavaScript】JavaScript 变量 ② ( JavaScript 变量语法扩展 | 同时声明多个变量 | 只声明变量赋值 | 声明变量赋值 | 声明变量直接进行赋值 )

展示效果 : 2、只声明变量赋值 在 JavaScript 中 , 使用 var 关键字 在 函数作用域或全局作用域...> 执行后 , 在 浏览器控制台 中 , 打印出的未赋值的变量值都为 " undefined " ; 3、声明变量赋值 在 JavaScript 中 , 声明变量 , 不对该变量进行赋值...在 JavaScript 中 , 声明变量 直接进行赋值 , 可以直接使用该变量 ; 如果 不显式声明变量 , 就直接进行 赋值使用 , 那么 这个变量会自动成为全局变量 , 在严格模式下直接报错..., 推荐这种方法 ; 代码示例 : // 声明变量直接进行赋值 // 该变量会变为全局变量 name2 = "Jerry";...> 执行后 , 该 声明 直接赋值 的变量 可以使用 ;

8210

PHP实现函数内修改外部变量值的方法示例

本文实例讲述了PHP实现函数内修改外部变量值的方法。...分享给大家供大家参考,具体如下: 直接上代码,如下: $a_str = 'ab'; function change_val(){ global $a_str; // 通过设置全局变量,修改变量值...abc'; return $s; // 通过返回值,修改变量值 } echo $b_str."<br "; $b_str = change_val_1($b_str); echo $b_str."...全局变量会增加内存使用量。 传值调用会创建一个副本,数据量很大时,会影响性能。 引用调用时,函数接收的是变量地址,不会创建数据副本,效率高 。...更多关于PHP相关内容感兴趣的读者可查看本站专题:《php常用函数与技巧总结》、《php字符串(string)用法总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》及《PHP数组(Array

1.6K31

内部函数外部函数

内部函数外部函数 函数是c语言程序中的最小单位,往往把一个函数或多个函数保存为一个文件,这个文件称为源文件。定义一个函数,这个函数就要被另外的函数所调用。...但当一个源程序由多个源文件组成时,可以指定函数不能被其他文件调用,这样C语出又把函数分为两类:一个是内部函数,另一个是外部函数。...内部函数 定义一个函数,如果这个函数只能被所在的源文件中的其他函数调用,而不能被其他源文件中的函数调用,这个函数称为内部函数,又称为静态函数。...外部函数 外部函数是指该函数可以被其他源文件中的函数调用 extern 返回值类型 函数名(参数列表); 例如: extern int add(int a, int b); 说明: C语言中,如果在定义时未指明是内部函数还是外部函数...,默认是外部函数,所以可以省略extern。

92410

7.6 内部函数外部函数

01 关于变量的声明和定义 1、一个函数一般由两部分组成:声明部分和执行语句。 2、对变量而言,声明与定义的关系稍微复杂一些。...4、在函数中出现的对变量的声明(除了用extern声明的以外)都是定义。在函数中对其他函数的声明不是函数的定义。 02 内部函数 1、内部函数 一个函数只能被本文件中其他函数所调用,它称为内部函数。...3、通常把只能由本文件使用的函数外部变量放在文件的开头,前面都冠以static使之局部化,其他文件不能引用。’...03 外部函数 1、在定义函数时,在函数首部的最左端加关键字extern,则此函数外部函数,可供其他文件调用。...例子 : extern int fun(int a,int b);这样,函数fun就可以为其他文件调用。 2、C语言规定,如果在定义函数时省略extern,则默认为外部函数

1K3129

Java 17 更新(10):访问外部函数的新 API,JNI 要凉了?

17 更新(4):这波更新,居然利好 mac 用户 Java 17 更新(5):历史包袱有点儿大,JDK 也在删代码啦 Java 17 更新(6):制裁!...Java 17 更新(7):模式匹配要支持 switch 啦 Java 17 更新(8):密封类终于转正 Java 17 更新(9):Unsafe safe,我们来一套 safe 的 API 访问堆外内存...我们书接上回,接着聊 JEP 412: Foreign Function & Memory API (Incubator) 当中访问外部函数的内容。...相比之前,JNI 需要提前通过声明 native 方法来实现与外部函数的绑定,新 API 则提供了直接在 Java 层通过函数符号来定位外部函数的能力: System.loadLibrary("libsimple...: int GetCLangVersion() { return __STDC_VERSION__; } 通过以上手段,我们直接获得了外部函数的地址,接下来我们就可以使用它们来完成调用: MethodHandle

2.1K30

正确理解 golang 函数变量的作用域, 管你 defer defer

并不是,其实是在考 函数变量的作用域 以下这是 go语言爱好者 97 期的一道题目。要求很简单, 代码执行 i, j 的值分别是什么。...j) } func hello(i *int) int { defer func() { *i = 19 }() return *i } 这道题虽然代码少, 但是考点还是蛮多的 核心: 函数变量作用域...函数及返回值 其实 go 中关于函数返回花样还是挺多的。...但是遇到了 defer, 闭包, 指针 中对变量有操作, 那么问题可能就大了。 如果对 函数变量的作用域 理解不清楚的话, 就容易掉坑。...~r2 变量名, 其 等价于 NamedResult 函数中的变量x 汇编中 RET后没有带任何参数 所有与结果有关的操作都标记了 (SP) , ex: MOVQ AX, "".

66120

7.6 C语言内部函数外部函数

01关于变量的声明和定义 1、一个函数一般由两部分组成:声明部分和执行语句。 2、对变量而言,声明与定义的关系稍微复杂一些。...4、在函数中出现的对变量的声明(除了用extern声明的以外)都是定义。在函数中对其他函数的声明不是函数的定义。 02内部函数 1、内部函数 一个函数只能被本文件中其他函数所调用,它称为内部函数。...3、通常把只能由本文件使用的函数外部变量放在文件的开头,前面都冠以static使之局部化,其他文件不能引用。’...03外部函数 1、在定义函数时,在函数首部的最左端加关键字extern,则此函数外部函数,可供其他文件调用。...例子 : extern int fun(int a,int b);这样,函数fun就可以为其他文件调用。 2、C语言规定,如果在定义函数时省略extern,则默认为外部函数

1.3K3127

【Python】循环语句 ⑥ ( 变量作用域 | for 循环临时变量访问 | 分析在 for 循环外部访问临时变量的问题 | 在 for 循环外部访问临时变量的正确方式 )

for 循环的临时变量 在 循环体外部也可以访问 , 但是建议这么做 , 代码不够规范 ; 如果需要在外部访问 for 循环的临时变量 , 建议将该 临时变量 预定义在 for 循环的外部 , 然后在后续的所有代码中可以访问该...临时变量 ; 一、变量作用域 1、for 循环临时变量访问 下面的 for 循环中 , 临时变量 i 变量 的作用域范围 , 仅限于 for 循环语句内部 , 但是在 for 循环外部可以访问到临时变量...; 但是 如果在 for 循环外部 访问该临时变量 i 是可以访问的 , 上述代码的执行结果如下 : 0 1 2 2 2、分析在 for 循环外部访问临时变量的问题 下面分析一下上述 在 for 循环外部访问...建议使用 , 会造成代码不可维护 , 以及其它未知错误 ; 但是从编译规则上 , 这种用法并不报错 , 程序可以跑通 , 写出这种代码的就是低级程序员 ; 3、在 for 循环外部访问临时变量的正确方式...""" # 先定义临时变量 # 在后面的代码中 # 不管是 for 循环内部 , 还是 for 循环外部 # 都可以使用该 变量 i i = 0 # i 变量是 for 循环的 临时变量, 仅在

30240

【JS面试题】如何通过闭包漏洞在外部修改函数中的变量

闭包(closure)是一个函数以及其捆绑的周边环境状态(lexical environment,词法环境) 的引用的组合。换而言之, 闭包让开发者可以从内部函数访问外部函数的作用域。...闭包其实就是指在函数内部定义一个函数, 内部定义的函数可以访问外部函数作用域中的变量, 这样就形成了一个封闭的作用域,被称作闭包。 即使外部函数已经执行完毕,闭包仍然可以访问这些变量。...这样我们就可以在函数外部 使用一个函数内的变量。 闭包还可以用来创建“私有”变量和方法,提高代码的封装性和安全性。 闭包 最根本的作用就是实现函数变量的一个长期存储,让它不会被销毁。...例 function outerFunction() { //在函数内定义一个变量函数作用域) const outerVariable = 0; //函数内部再定义一个函数,并在这个函数中使用外层函数内定义的变量...innerFunc(); 1 innerFunc(); 2 const innerFunc2 = outerFunction(); innerFunc2(); 1 innerFunc2(); 2 `` 如何在函数外部修改闭包中变量

29220
领券