• Python中的全局变量与局部变量的区别


    全局变量与局部变量两者的本质区别就是在于作用域

    用通俗的话来理解的话,

    全局变量是在整个py文件中声明,全局范围内都可以访问

    局部变量是在某个函数中声明的,只能在该函数中调用它,如果试图在超出范围的地方调用,程序就爆掉了

    如果在函数内部定义与某个全局变量一样名称的局部变量,就可能会导致意外的效果,可能不是你期望的。因此不建议这样使用,这样会使得程序很不健全

    直接来看几个例子来理解全局变量和局部变量的区别吧:

    Demo1:

    1. def fun(x):  
    2.     y=2  
    3.     print("乘法的运行结果:",x*y)  
    4. num1=1  
    5. print("初始num1=",num1)  
    6. fun(num1)  
    7. print("y的值是:",y)  

    运行结果:

     

    报错的原因是因为试图访问局部变量,但是访问的地方不在该变量y的作用域中

     

    Demo2:

    1. def fun():  
    2.     num1=2  
    3.     print("函数内修改后num1=",num1)  
    4. num1=1  
    5. print("初始num1=",num1)  
    6. fun()  
    7. print("运行完函数后num1=",num1)  

    运行结果:

     

    可以看到在函数内部对全局变量的修改后,在函数执行完毕,修改的结果是无效的,全局变量并不会受到影响

    再看:

    Demo3:

    1. def fun():  
    2.     num1*=2  
    3.     print("函数内修改后num1=",num1)  
    4. num1=1  
    5. print("初始num1=",num1)  
    6. fun()  
    7. print("运行完函数后num1=",num1)  

    运行结果:

     

    报错了。这是因为在fun()函数使用了局部变量num1,它只是个跟全局变量同名的局部变量,使用前还是要赋值,因此再次强调不要这样使用

     

    global关键字

    如果真的想要在函数体内修改全局变量的值,就要使用global关键字

    Demo4:

    1. def fun():  
    2.     global num1  
    3.     num1=2  
    4.     print("函数内修改后num1=",num1)  
    5. num1=1  
    6. print("初始num1=",num1)  
    7. fun()  
    8. print("运行完函数后num1=",num1)  

     

    运行结果:

    使用global关键字就是告诉python编译器这个变量不是局部变量而是全局变量,其实有点像是"引用"的意思

     

    nonlocal关键字

    再看看另一个跟变量相关的关键字nonlocal,字面意思就是指当前的这个变量不是局部变量。nonlocal是Python3.0中新增的关键字,python2.x不支持

    先来看看下面这段代码

    1. def fun():  
    2.     num2=3  
    3.     def fun2():  
    4.         num2*=2  
    5.         print("num2=",num2)  
    6.     return fun2()  
    7.   
    8. fun()  

    运行结果:

     

    错误的原因跟前面的差不多,就是使用了未定义的局部变量,然而num2也不是全局变量,只是fun2函数的外层变量,强行使用global定义num2的话同样会报错(不信你试试)

    这时候需要使用nonlocal关键字: 

    1. def fun():  
    2.     num2=3  
    3.     def fun2():  
    4.         nonlocal num2  
    5.         num2*=2  
    6.         print("num2=",num2)  
    7.     return fun2()  
    8.   
    9. fun()  

    运行结果:

     

    如此,程序就能正常执行

  • 相关阅读:
    121. Best Time to Buy and Sell Stock
    70. Climbing Stairs
    647. Palindromic Substrings
    609. Find Duplicate File in System
    583. Delete Operation for Two Strings
    556 Next Greater Element III
    553. Optimal Division
    539. Minimum Time Difference
    537. Complex Number Multiplication
    227. Basic Calculator II
  • 原文地址:https://www.cnblogs.com/Archmage/p/7569817.html
Copyright © 2020-2023  润新知