python-变量作用域

python-变量作用域

  • 变量作用域

    Pyhton 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。

    变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。两种最基本的变量作用域如下:

    • 全局变量
    • 局部变量

    • 全局变量和局部变量-简介

      定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。

      局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。如下实例:

            #!/usr/bin/python3
      
            total = 0; # 这是一个全局变量
            # 可写函数说明
            def sum( arg1, arg2 ):
                #返回2个参数的和."
                total = arg1 + arg2; # total在这里是局部变量.
                print ("函数内是局部变量 : ", total)
                return total;
      
            #调用sum函数
            sum( 10, 20 );
            print ("函数外是全局变量 : ", total)

      以上实例输出结果:

            函数内是局部变量 :  30
            函数外是全局变量 :  0
  • 示例讲解

      # ---------------------------
      # 在函数中对变量进行赋值操作则被视为内部局部变量
      # ---------------------------
    
          num = 0
    
          def var_func1():
              num=1
              print("num in var_func1 is %d" % num)
    
          var_func1()
              >>> var_func1()
              num in var_func1 is 1
    
          print("num is %d " % num)
              >>> print("num is %d " % num)
              num is 0 
    
      # ---------------------------
      # --num 被视为var_func2的内部局部变量, 但是调用是在定义之前
      # ---------------------------
    
          num = 0
    
          def var_func2():
              print("num in var_func2 is %d" % num)
              num = 1
    
          try:
              var_func2()
          except UnboundLocalError as e:
              print('Error is:', e.args)
    
          print("num is %d " % num)
    
    
    
      # ---------------------------
      # -- 数组 li 变量作用域
      # ---------------------------
    
          li = [1, 2, 3]
    
          def foo():
              # 此处li是对应的全局变量, 而非内部局部变量
              li.append(4)
              print(li)
    
          foo()
    
    
          def bar():
              # 此处li被视为是内部局部变量(因为是赋值操作), 但是在执行li 追加的时候li并没有定义
              li += [5]
              print(li)
    
          try:
              bar()
          except UnboundLocalError as e:
              print('Error is:', (e))
    
    
          def bar1():
              # 已显式全局变量的形式调用li变量
              global li
              li += [5]
              print(li)
    
          bar1()
    
    
    
      # ---------------------------
      # Python中的变量:全局变量和局部变量 - 示例
      # 在很多语言中,在声明全局变量的时候,都喜欢把全局变量的名称定义为大写
      # 定义学生人数为10000
      # ---------------------------
    
          STUDENT_NUMBER = 10000
    
          # 学校名称
          SCHOOL_NAME = 'HARBIN UNIVERSITY OF COMMERCE'
    
          # 获取全局变量:学生人数STUDENT_NUMBER的值
          def getStudentNumber():
              return STUDENT_NUMBER
    
          # 重置全局变量:学生人数STUDENT_NUMBER值
          def setStudentNumber(num):
              global STUDENT_NUMBER
              STUDENT_NUMBER = num
    
          # 获取全局变量:学校名称SCHOOL_NAME的值
          def getSchoolName():
              return SCHOOL_NAME
    
          # 重置全局变量:学校名称SCHOOL_NAME值
          def setSchoolName(name):
              global SCHOOL_NAME
              SCHOOL_NAME = name
    
          def changeValue():
              name = '哈尔滨商业大学'
              number = 88
              print('全局变量STUDENT_NUMBER = ', getStudentNumber())
              print('全局变量SCHOOL_NAME = ', getSchoolName())
              print('#######################################')
              print('局部变量number = ', number)
              print('局部变量name = ', name)
              print('#######################################')
              print('改变全局变量值...')
              print('#######################################')
              setStudentNumber(number)
              setSchoolName(name)
              print('全局变量STUDENT_NUMBER = ', getStudentNumber())
              print('全局变量SCHOOL_NAME = ', getSchoolName())
    
          if __name__ == '__main__':
              changeValue()

转载于:https://www.cnblogs.com/cloudtj/articles/6076415.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值