函数里面的global 和 nonlocal 关键字的使用

"""
global和nonlocal关键字:
当修改全局变量时,使用global关键字声明;
当修改嵌套作用域(enclosing作用域,外层非全局作用域)时,使用nonlocal关键字声明;

"""

#修改全局变量时,使用global关键字声明;

a=10
def f():   
    global a  # global修改全局变量,先声明
    a=20
    print(a)   
    def f1():
        a=30
        print(a)
    f1()
    print(a)
print(a)
f()

"""
10
20
30
20
"""

#修改嵌套作用域(enclosing作用域,外层非全局作用域)时,使用nonlocal关键字声明;

a=10
def f():   
   
    a=20 #这个 a 是嵌套作用域(enclosing作用域,外层非全局作用域)
      
    def f1():
        nonlocal a
        a=30
        print(a)
    f1()
    print(a)
print(a)
f()

"""
下面这段代码运行时会报错,因为test函数中的a是局部变量,未被定义;
UnboundLocalError: local variable ‘a‘ referenced before assignment
"""

a=10
def test():
    a=a+1
    print(a)
test()

#如下:把全局变量a传入函数test里,可正常执行
a=10
def test(a):
    a=a+1
    print(a)
test(a)

原文地址:https://www.cnblogs.com/zpdbkshangshanluoshuo/p/9688052.html

时间: 2024-08-27 03:52:32

函数里面的global 和 nonlocal 关键字的使用的相关文章

python(动态传参、命名空间、函数嵌套、global和nonlocal关键字)

一.函数的动态传参 1.*args位置参数动态传参 def chi(*food): print(food) chi("烧烤","火锅","虾吃虾涮","烤鱼") 多个位置参数传递进去,收到的内容是元组tuple,动态参数的位置必须要在位置参数后面 2**kwargs 关键字参数动态传参 def chi(**food): print(food) chi(zhangqing="吃点好的",lianda=&quo

python13 1.函数的嵌套定义 2.global、nonlocal关键字 3.闭包及闭包的运用场景 4.装饰器

## 复习 '''1.函数对象:函数名 => 存放的是函数的内存地址1)函数名 - 找到的是函数的内存地址2)函数名() - 调用函数 => 函数的返回值  eg:fn()() => fn的返回值一定是函数使用:1)直接被其他变量接收 - 将函数的内存地址直接给其他变量 => 被赋值的变量也是函数对象2)可以作为函数的参数 - 函数的形参接收到的实参是函数对象 => 形参被赋值后也是函数对象3)可以作为函数的返回值 - 用变量在外界调用并接受这个函数的值 => 用来接收

函数的上下文就是函数里面的this是谁

规律1:函数用圆括号调用,函数的上下文是window对象 比如小题目: function fun(){ var a = 888; alert(this.a); //实际上访问的是window.a } var a = 666; fun(); //弹出666 函数function fun(){}的上下文是什么!不要看它怎么定义,要看它怎么调用!!此时是fun()函数名加上圆括号直接调用,此时上下文就是window对象! 而我们知道:所有的全局变量都是window对象的属性,(注意:函数里面的局部变量

3.关于作用域知识的额外补充global和nonlocal关键字

本遍文章对global关键字和nonlocal关键字进行补充,这两个关键字在以后做python开发的时候,能不用尽量别用!最好别用!总会出现让你意想不到的后果... 1.先说第一种global,不管在任何作用域下,只要是使用global声明的变量,都会变为全局变量. 直接上例子. 首先是不使用global声明变量. x = 1 def f1(): x = "suhaozhi" print x def f2(): x = "hamasakiayumi" print x

python学习第十天,名称空间与作用域,函数的嵌套,global 和 nonlocal

名称空间: 内置名称空间: 在打开pytharm是加载 全局名称空间: 在运行py文件是加载 局部名称空间(临时名称空间) :在py文件中调用时加载 def func(): ----->函数定义 pass ------->函数体 func()------------->函数调用 函数定义时:内存中只储存与函数名的对应关系,函数体的内容不储存 函数调用时:才执行函数体的内容,创建临时空间,随着函数执行结束,内存中的临时名称空间里面的内容也清空 作用域: 全局作用域:内置名称空间里的内容+全

python随笔系列--global和nonlocal关键字

global 函数外部定义的变量(即global范围),在函数内部可以引用,但是不能修改. 如果函数中要使用一个外层(这里是global)的变量,若函数内部使用global标记该变量,那么在函数内尽可以"读取"该变量:若要在函数内修改该global变量,则需要用global语句,函数对该变量的修改也会体现到global作用域. >>> oo=123 >>> def kai(): print(oo) oo = pp+1 print(oo) >&g

关于函数里和函数外的变量/类/常量的

关于函数里和函数外的变量/类/常量的     1 变量是不能跨越到函数里面的,即函数外面的变量不能直接在函数里面使用,函数里面的变量更不能被函数外面使用 2 类可以跨越到函数里面,但是不能实例化之后赋给一个变量再在函数里用,这样相当于变量,而变量是不能跨越到函数里的 3 常量 有些复杂,(其实也好理解) 常量的作用范围是本次页面   具体如下 ①: 函数外定义,函数里可以使用 define("AAA","Good"); function a(){ echo AAA;

函数的第二节课,动态传参,动态关键字参数,作用域,关键字global和nonlocal

今日内容总结: 一.函数参数--动态传参 动态参数必须是在位置参数后面,比如:def chi(a,b,*food): print("我要吃",a,b,food)chi("大米饭","小米饭","黄瓜","西红柿") 默认值参数必须是在最后位置,比如:def chi(a,b,*food,c="馒头"): print(a,b,food,c)chi("香蕉", "

Python全栈__动态参数、名称空间、作用域、作用域链、加载顺序、函数的嵌套、global、nonlocal

1.动态参数 当实参数量与形参数量相等时,参数传递正常. def func1(a, b, c): pass func1(1, 2, 3) 当实参数量与形参数量不相等时,则会报错. def func1(a, b, c): pass func1(1, 2, 3, 4, 5, 6, 6) 用户传入到函数中的实参数量不确定时,或者为了以后扩展,此时要用到动态参数 *args  **kwargs(万能参数). 顺序: 位置参数,*args,默认参数,**kwargs 1.*args *args是接收的是所