**1、命名空间的定义**

```html 我们开发的代码中肯定会声明的常量名,变量名、函数名、对象名,解释器在加载这些代码的时候,会在内存中开辟一片空间专门用来存放这些名字以及这些名字所绑定的值的关系,,就像是字典,key是变量名,value是变量的值,这块内存就被称为名称空间。 ``` ```python # 导入内置名 import time # 定义常量名 CODE='001' # 定义变量名 name='Jack' # 定义函数名 def func(): pass # 定义类名 class Foo: pass ```

**2、命名空间的分类**

```html 命名空间的分类:内置名称空间、全局名称空间、局部名称空间 ```
  • 内置名称空间
内置名称空间: 伴随python解释器的启动而产生,包括异常类型、内建函数和特殊方法,可以代码中任意地方调用。
# 获取全部的内置函数名
import builtins
for buil_func in dir(builtins):
    print(buil_func)
"""
ArithmeticError
AssertionError
AttributeError
BaseException
BlockingIOError
......
InterruptedError
breakpoint
bytearray
bytes
callable
......
str
sum
super
tuple
type
vars
zip
"""
  • 全局名称空间
全局名称空间:文件的执行会产生全局名称空间,指的是文件级别定义的名字都会放入该空间。
# 全局变量声明
name = 'Jack'

def func():
    # 函数内,无同名局部变量,则使用全局变量
    return name

print(func())
# 'Jack'
  • 局部名称空间
局部名称空间:调用函数时会产生局部名称空间,只在函数调用时临时绑定,调用结束解绑定。
# 全局变量声明
name = 'Jack'

def func():
    name = 'Rose'
    # 函数内,有同名局部变量,则使用局部变量
    return name

print(func())
# 'Rose'

**3、名称的加载顺序**

```html 名称的加载顺序:内置名称--->全局名称--->局部名称 ``` ```html 特别说明:当我们打开解释器的时候内置变量以及函数就立即被加载,当我们执行一段代码的时候,全局变量以及函数才被加载,但是函数内部并不会被执行,只有在函数被调用的时候才会加载它内部的变量以及内嵌函数。 ```

**4、名称的查找顺序**

```html 名称的查找顺序:局部名称--->全局名称--->内置名称 ``` ```html 特别说明:与名称的加载顺序刚好相反,python解释器在用到一个变量或者函数的时候,它会优先从局部名称空间去查找,如果没有,再到全部名称空间去查找,如果还没有,才会去内置名称空间去查找。 ``` ```python name = 'Jack' def input(): name = 'Rose' return name print(input()) # 'Rose'

"""
代码说明:内置函数中存在input()函数,我们也自定义了input()局部函数,优先调用input()局部函数。函数中优先调用局部变量name,而不是全局变量name。
"""


<h4 style='background-color:deepskyblue;border-radius:8px;text-align:center;' id='5'>**5、作用域**</h4>
```html
定义:作用域就是作用范围,按照生效范围可以分为全局作用域和局部作用域。
<1>.全局作用域:包含内置名称空间、全局名称空间,在整个文件的任意位置都能被引用、全局有效。
<2>.局部作用域:局部名称空间,只能在局部范围内生效。
  • global关键字
global: 在局部作用域内可以调用全局作用域的变量,但是它是没有权限修改,如果非要修改,那么就要用到global这个关键字了。
name = 'Jack'
def input():
	global name
    name = 'Rose'
	return name
print(input())
# 'Rose'
print(name)
# 'Rose'
"""
代码说明:在函数内利用global关键字调用全局name变量,并对全局name变量重新赋值。
"""
  • nonlocal关键字
nonlocal:nonlocal关键字用来在函数或其他作用域中使用外层(非全局)变量。用于声明,修改嵌套作用域(enclosing 作用域,外层非全局作用域)中的变量。
def outer():
    num = 10
    def inner():
        nonlocal num   # nonlocal关键字声明
        num = 100
        print(num)
    inner()
    print(num)
outer()
posted on 2022-01-27 14:19  码农青葱  阅读(61)  评论(0)    收藏  举报