函数的名称空间与作用域
2023-12-14 20:34:03
文章目录
书接上回,上次我们讲解了函数的分类与函数参数,这次将对函数的名称空间与作用域做详细介绍
一、名称空间
函数名称空间是指变量和函数的命名空间,它是一个存储变量和函数名称的容器。在函数中定义的变量和函数都包含在函数名称空间中,并且只能在该函数中访问。在Python中,每个函数都有自己的局部名称空间。当函数被调用时,它创建了一个新的局部名称空间,并在该空间中执行函数代码。当函数完成时,该名称空间将被销毁。
简单来说名称空间就是存放变量名和变量值的地方
1.1名称空间的分类
1.内置空间的名称
Python中的内置名称空间包含了Python解释器内置的函数和变量。这些函数和变量可以在任何地方直接访问,不需要导入任何模块。比如:print、input、len等
2.全局的名称空间
在Python中,顶格编写的变量名等都是全局名称空间,如下:
name = 'A_biao'
def index()
pass
if x == 1:
pass
for i in range(10)
pass
3.局部空间名称
伴随函数的调用/结束而临时产生/回收,函数的形参、函数内定义的名字都会被存放于该名称空间中
一般来说存在于函数内部的都是局部
def index()
a=1
b=2
全局变量:在函数外部的变量都是全局变量
局部变量:在函数内部的变量都是局部变量
4.名字的查找顺序
1.如果在局部的时候:局部>>>全局>>>内置
2.如果在全局的时候:全局>>>内置
5.局部空间名称的嵌套
def f1():
x = 222
print('f1')
def f2():
print('f2')
x = 333
def f3():
print('f3')
x = 444
def f4():
x = 555
print(x)
f4()
f3()
f2()
f1()
1.2名称空间的作用域
域:范围
作用域:变量的作用范围
- 内置名称空间
在全局的任意位置都能够使用 - 全局名称空间
在全局的任意位置任意时间都能够使用 - 局部名称空间
一般情况只能够在局部使用
二、global和nonlocal的使用
1. 在Python中,如果在函数内部需要改变全局作用域中的变量,需要使用global关键字。
x = 10
def index():
global x # 声明这个x用的是全局的x
x = 20 # 在局部修改全局x的值为20
print(x)
index()
print(x)
如果你想在局部修改全局的变量:
1. 如果你修改的是不可变的类型,需要global关键字的声明
2. 如果你修改的是可变类型的,无需使用global关键字声明
2. 在Python中,如果在一个嵌套函数中需要修改嵌套作用域中的变量,但不想将该变量声明为全局变量,可以使用nonlocal关键字。
def outer():
x = 666
def inner():
nonlocal x
x = 999
inner()
print(x) # 999
outer()
如果你想在内部的局部修改外部的局部:
1. 如果你修改的是不可变的类型,需要nonlocal关键字的声明
2. 如果你修改的是可变类型的,无需使用nonlocal关键字声明
文章来源:https://blog.csdn.net/shiyaopeng11/article/details/132738118
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!