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()

posted @ 2016-11-18 09:35  银河统计  阅读(215)  评论(0)    收藏  举报