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