标签:nonlocal 自己 嵌套 bubuko 例子 东北 全局 info 地方
全局变量:在定义的时候,顶头写的,没有任何缩进的变量就是全局变量。
全局变量的特点:在当前文件里的任何地方都可以进行调用
局部变量:在子程序里定义的变量,就是局部变量。
子程序:比如.py文件里,写的函数就是个子程序。而这个函数里定义的变量就是局部变量
示例:全局变量
# 全局变量 name=‘alex‘ def change_name(): print(‘change_name‘,name) # 调用了全局变量 change_name() # 结果 change_name alex print(name) #调的是全局变量 # 结果 alex
示例:函数体内定义局部变量
# 全局变量:全局作用域 name=‘alex‘ def change_name(): name=‘帅呆了‘ # 局部变量:局部作用域 print(‘change_name‘,name) # 先在自己的子程序里找,调用了局部变量 # 举个生活中的例子,刚起床找手机,肯定现在自己卧室(函数)找,自己卧室找不到,才可能会到卧室(函数之外)之外去找。 # 所以,很好的理解,就是优先内部,然后外部;局部变量只能该函数自己使用(私心重),全局变量就比较大方,谁需要就可以拿去用 change_name() # 结果 change_name 帅呆了 print(name) #调的是全局变量 # 结果 alex
示例:函数体内声明全局变量
# 全局变量 name=‘alex‘ def change_name(): global name # 函数体内声明了全局变量 name=‘帅呆了‘ # 函数体内修改了全局变量的值 print(‘change_name‘,name) # 调用了全局变量 change_name() # 结果 change_name 帅呆了 print(name) #调的是全局变量,但是全局变量的值已经被修改 # 结果 帅呆了
更好的示例
如果函数的内容无global关键字,优先读取局部变量;如果没有局部变量,只能读取全局变量,无法对全局变量重新赋值,但于可变类型,是可以对内部元素进行操作
如果函数的内容有global关键字,函数内的变量就是全面局变量,可以读取,可以赋值
name = "桃花李" def yangjian(): global name # 已经声明,NAME就是全局的的那个变量 print(‘我要‘, name) name = "小东北" # 修改 全局的变量 print(‘我要‘, name) def qupengfei(): name = "基" print(‘我要搞‘, name) yangjian() qupengfei() #结果 我要 桃花李 我要 小东北 我要搞 基
总结
全局变量变量名大写
局部变量变量名小写
下面的示例为了说明全局变量和局部变量的关系,都用的是大写。
# 如果函数的内容无global关键字: # - 有声明局部变量 NAME = ["产品经理","廖波湿"] def qupengfei(): NAME = "自己" print(‘我要搞‘, NAME) qupengfei() # - 无声明局部变量 NAME = ["产品经理","廖波湿"] def qupengfei(): NAME.append(‘XXOO‘) print(‘我要搞‘, NAME) qupengfei() # 如果函数的内容有global关键字 # - 有声明局部变量 NAME = ["产品经理","廖波湿"] def qupengfei(): global NAME NAME = "自己" print(‘我要搞‘, NAME) qupengfei() # 错误示例, 全部变量放在了局部变量的下面,是不行的;所以,如果要什么全局变量,就尽量往前放。 NAME = ["产品经理","廖波湿"] def qupengfei(): NAME = "自己" global NAME print(‘我要搞‘, NAME) qupengfei() # - 无声明局部变量 NAME = ["产品经理","廖波湿"] def qupengfei(): global NAME NAME = ["阿毛"] NAME.append(‘XXOO‘) print(‘我要搞‘, NAME) qupengfei()
函数里也可以嵌套函数,执行顺序如下图所示
name=‘海风‘ def huangwei(): name = "黄伟" print(name) def liuyang(): name = "刘洋" print(name) def nulige(): name = ‘炉指花‘ print(name) print(name) nulige() liuyang() print(name) huangwei() # 结果 黄伟 刘洋 刘洋 炉指花 黄伟
name = "刚娘" def weihou(): name = "陈卓" def weiweihou(): global name # global,声明的是全局变量, name = "冷静" # 此处修改的是最外层的全局变量,而不是它上一级同名变量 weiweihou() print(name) print(name) weihou() print(name) #结果 刚娘 陈卓 冷静
name = "刚娘" def weihou(): name = "陈卓" def weiweihou(): nonlocal name # nonlocal,指定上一级变量,如果没有就继续往上直到找到为止 name = "冷静" weiweihou() print(name) print(name) weihou() print(name) # 结果 刚娘 冷静 刚娘
标签:nonlocal 自己 嵌套 bubuko 例子 东北 全局 info 地方
原文地址:https://www.cnblogs.com/victorm/p/9126380.html