Python学习笔记三
一、Python命名空间:
命名空间(Namespace)是从名称到对象的映射,大部分的命名空间都是通过 Python 字典来实现的。
命名空间提供了在项目中避免名字冲突的一种方法。各个命名空间是独立的,没有任何关系的,所以一个命名空间中不能有重名,但不同的命名空间是可以重名而没有任何影响。
一般有三种命名空间:内置名称、全局名称、局部名称
命名空间查找顺序:局部命名空间à全局命名空间à内置命名空间
命名空间的生命周期:命名空间的生命周期取决于对象的作用域,如果对象执行完成,则该命名空间的生命周期就结束。
var1=5 #全局名称 def some_func(): var2=6 #局部名称 def some_inner_func(): var3=7 #内嵌的局部名称
二、作用域
作用域就是一个 Python 程序可以直接访问命名空间的正文区域。
在一个 python 程序中,直接访问一个变量,会从内到外依次访问所有的作用域直到找到,否则会报未定义的错误。
Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。
变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python的作用域一共有4种:(搜索顺序) L --> E --> G --> B
g_count=1 #全局作用域 def outer(): o_count=3 #闭包函数外的函数中 def inner(): i_count=5 #内置作用域
Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域 。
也就是说这些语句内定义的变量,外部也可以访问 。
# msg 变量定义在 if 语句块中,但外部还是可以访问的。 if 1: msg='我是圆滚滚!' msg #如果将 msg 定义在函数中,则它就是局部变量,外部不能访问。 def test(): inner_msg='我是圆滚滚!' #局部变量,只有在函数内可以使用 inner_msg #报错
三、全局变量和局部变量:
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。
total=0 # 这是一个全局变量 def sum(args1,args2): total=args1+args2 print("函数内是局部变量:",total) #调用sum函数 sum(10,20) print("函数外是全局变量:",total)
四、当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字了:
# 修改全局变量 num num=1 def func1(): global num #global 关键字声明 print(num) num=123 print(num) func1() print(num) #修改嵌套作用域中的变量 def outer(): num=10 def inner(): nonlocal num # nonlocal关键字声明 num=123 print(num) inner() print(num) outer()
#下面代码会报错 a=11 def test(): a=a+1 print(a) test() #修改如下: a=11 def test(a): a=a+1 print(a) test(a)

浙公网安备 33010602011771号