zoukankan      html  css  js  c++  java
  • python的局部变量,全局变量,类变量,实例变量

    定义:

              a、全局变量:在模块内、在所有函数外面、在class外面,这就是全局变量。

              b、局部变量:在函数内、在class的方法内(未加self修饰的),这就是局部变量。

              c、 静态变量:在class内的,但不在class的方法内的,这就是静态变量。

              d、 实例变量:在class的方法内的,用self修饰的变量,这就是实例变量。


    1.全局变量与局部变量:

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

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

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

    demo1:

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

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

    demo2

    def fun():  
        num1=2  
        print("函数内修改后num1=",num1)  
    num1=1  
    print("初始num1=",num1)  
    fun()  
    print("运行完函数后num1=",num1)  

    运行结果:

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

    demo3:

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

    运行结果:

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

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

    Demo4

    def fun():  
        global num1  
        num1=2  
        print("函数内修改后num1=",num1)  
    num1=1  
    print("初始num1=",num1)  
    fun()  
    print("运行完函数后num1=",num1) 

    运行结果:

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

    nonlocal关键字

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

    先来看看下面这段代码

    def fun():  
        num2=3  
        def fun2():  
            num2*=2  
            print("num2=",num2)  
        return fun2()  
      
    fun()  

    运行结果:

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

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

    def fun():  
        num2=3  
        def fun2():  
            nonlocal num2  
            num2*=2  
            print("num2=",num2)  
        return fun2()  
      
    fun() 

    运行结果:

    2.类变量与实例变量:

     https://blog.csdn.net/qq_37315403/article/details/81539340

    a = 1 # 这个是全局变量 全局这个.py 任意一个函数或者方法都可以使用

    def test1():
    a = 2 # 这个是局部变量 在这个函数可以使用

    class clazz1():
    a = 3 # 这个静态变量 在当前类可以使用
    def test2(self):
    a = 4 # 这个是局部变量 在这个方法可以使用
    self.b = 5 # 这个是实例变量 属性b 在当前类共享

  • 相关阅读:
    wifi 天线
    Ubuntu下通过SSH远程登录服务器的方法
    wifi 天线
    免费20G全能空间正在火爆开放中。。。。。要的抓紧时间申请了.
    php设计模式 Mediator (中介者模式)
    DEDE图片集上传图片时出错显示(FILEID)的解决办法
    SPL spl_autoload_register与__autoload方法使用示例浅谈
    mysql_fetch_array()和mysql_fetch_assoc()两个函数的区别
    nginx多站设置
    php中echo(),print(),print_r()的区别
  • 原文地址:https://www.cnblogs.com/shengguorui/p/10683928.html
Copyright © 2011-2022 走看看