python局部变量、全局变量,global、nolocal的区别

def fun1():    x = 5 # 非全局变量的外部变量,在fun2()的外部作用域里边    def fun2():        x *= x # 会报错未定义        return x    return fun2()fun1()

解决办法1:用容器存放,因为容器类型不是存放在栈里边(局部变量存放在栈里边),所以不会被屏蔽起来
def fun2():    x = [5]    def fun2():        x[0] *= x[0]        return x[0]    return fun2()fun2()解决办法2:用nolocal
def fun3():    x = 5    def fun2():        nonlocal x # 不能用global x,因为x不是全局变量        x *= x        return x    return fun2()fun3()

global关键字修饰变量后标识该变量是全局变量,对该变量进行修改就是修改全局变量,而nonlocal关键字修饰变量后标识该变量是上一级函数中的局部变量,如果上一级函数中不存在该局部变量,nonlocal位置会发生错误。

原文地址:https://www.cnblogs.com/wisir/p/12424064.html

时间: 2024-09-29 14:58:01

python局部变量、全局变量,global、nolocal的区别的相关文章

python局部变量和全局变量(6)

在python开发中,变量也是有生命周期的,一旦周期结束,程序会自动清理暂用的空间,释放内存,变量分为两者,一种是局部变量,一种是全局变量,两者具体有什么区别呢…… 一.局部变量 一般而言在函数内部或者类中声明的变量默认都是局部变量.一旦函数结束,变量的生命周期也会结束,占用的空间会被自动释放. def func1(): # 在函数内部定义的变量默认都是局部变量 a = 1 print(a) # 函数结束,局部变量a的生命周期结束 # 由于a是局部变量,并且a的生命周期已经结束,外部再次调用局部

Python 局部变量 与全局变量

Demo 全局变量是在整个py文件中声明,全局范围内都可以访问 局部变量是在某个函数中声明的,只能在该函数中调用它,如果试图在超出范围的地方调用,程序就爆掉了 monet=22323 # 全局变量#局部变量 不加globaldef functiondemo(): # 如果 函数 不带参数,但是想要访问 全局变量 #必须加上global ,这样子就是局部变量了 global monet # 转换为全局变量,假如不转换的话,会报错的 s=2 monet += 2 #没有转换的话这里会报错 因为这是局

python函数(全局变量,局部变量,作用域,递归函数,高阶函数,匿名函数)

1.1函数 1.1.1什么是函数 函数就是程序实现模块化的基本单元,一般实现某一功能的集合.函数名:就相当于是程序代码集合的名称参数:就是函数运算时需要参与运算的值被称作为参数函数体:程序的某个功能,进行一系列的逻辑运算return 返回值:函数的返回值能表示函数的运行结果或运行状态. 1.1.2函数的作用 函数是组织好的,可重复使用的,用来实现单一,或者相关功能的代码. 函数能够提高应用的模块性,和代码的重复利用率 我们已近知道python提供了许多内置函数,比如print(),我们自已创建的

(十六)python 3 全局变量局部变量

全局变量和局部变量 全局变量与局部变量两者的本质区别就是在于作用域. 用通俗的话来理解的话,全局变量是在整个py文件中声明,全局范围内都可以访问.局部变量是在某个函数中声明的,只能在该函数中调用它,如果试图在超出范围的地方调用,程序就爆掉了. 在子程序中定义的变量称为局部变量,只在子程序内部生效, 在程序一开始定义的变量称为全局变量 全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序. 当全局变量与局部变量同名时:在定义局部变量的子程序内,局部变量起作用,在其他地方全局变量起作用 gl

【转】全局变量与局部变量在内存中的区别详细解析

转自:http://www.jb51.net/article/42012.htm 作者: 字体:[增加 减小] 类型:转载 时间:2013-10-11 我要评论 以下是对全局变量与局部变量在内存中的区别进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助 一.预备知识-程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)- 由编译器自动分配释放,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈. 2.堆区(heap) - 一般

python之全局变量

http://www.cnblogs.com/phoebus0501/archive/2011/01/18/1938728.html 应该尽量避免使用全局变量, 因为:1) 不同的模块都可以自由的访问全局变量,可能会导致全局变量的不可预知性. 对全局变量,如果程序员甲修改了_a的值,程序员乙同时也要使用_a,这时可能导致程序中的错误.这种错误是很难发现和更正的. 2) 全局变量降低了函数或模块之间的通用性,不同的函数或模块都要依赖于全局变量. 同样,全局变量降低了代码的可读性,阅读者可能并不知道

转:Python之全局变量

应该尽量避免使用全局变量.不同的模块都可以自由的访问全局变量,可能会导致全局变量的不可预知性.对全局变量,如果程序员甲修改了_a的值,程序员乙同时也要使用_a,这时可能导致程序中的错误.这种错误是很难发现和更正的. 全局变量降低了函数或模块之间的通用性,不同的函数或模块都要依赖于全局变量.同样,全局变量降低了代码的可读性,阅读者可能并不知道调用的某个变量是全局变量. 但是某些时候,全局变量能够解决局部变量所难以解决的问题.事物要一分为二. python里面全局变量有两种灵活的用法: 1 声明法

Java基础——成员变量、局部变量和静态变量的区别

之前在刚开始学习Java的时候,就谈了谈Java基础中的变量,虽然知道这货以后会经常用到,但没想到了基本语法这里,竟然有冒出来了成员变量.局部变量和静态变量.变来变去太容易让人搞晕了,挑拣出来梳理一下喽! 要想区分这哥仨,首先,我们得知道它们分别是什么.先从成员变量下刀. 成员变量 我们来研究一个事物: 属性:外在特征:例如人的身高,体重 行为:能够做什么:例如人有说话,打球等行为. 而在Java语言中,最基本的单位是类,类就是用来体现事物的. 用类class来描述事物也是如此: 属性:对应类中

C语言之局部变量&全局变量&变量存储方式

一.角度分析: 变量作用域 -------> 局部变量和全局变量 变量存在的生存期 ---------> 静态存储方式和动态存储方式 二.局部变量: 局部变量也称为内部变量.局部变量是在函数内作定义说明的.其作用域仅限于函数内,离开函数后再使用这种变量是非法的. 例子: 关于局部变量的作用域还要说明以下几点: 1)主函数也是一个函数,它与其他函数是平行关系.主函数中定义的变量也只能在主函数中使用,不能在其他函数中使用.同时,主函数中也不能使用其他函数中定义的变量. 2)形参变量是属于被调函数的

python 多线程和C++多线程的区别

看到论坛上有人问python多线程和C++多线程的区别? 暖神是这样回答的: Python有Global Interpreter Lock,所以嘛……你懂的.C++11开始才有多线程,使用共享内存方式的线程间通信,有低级的atomic operation和memory order,以及高级的lock, condition的,却没有提供消息队列. 然后,就去找GIL(Global Interpreter Lock)的定义,下面有一个定义,wiki的定义是这样的.在stackoverflow上看到了