python中变量的作用域,python定义域
本文主要详细介绍Python的作用域规则。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下,希望能帮到你。
00-1010 1.简单介绍一下闭包。2.在Python中,不是任何代码块都可以引入新的作用域。3.在Python中,名称绑定在其作用域中引入了新的变量,同时绑定到一个对象。Python是一种静态范围语言,但它是一种动态语言。Python中变量的作用域是由变量在代码中的位置决定的,有点类似于C语言,但又不完全相同。
在Python 2.0及更早的版本中,Python只支持三种作用域,即局部作用域、全局作用域和内置作用域;在Python中
在2.2中,Python正式引入了新的作用域——嵌套作用域;嵌套作用域的引入本质上支持Python的闭包。
目录
定义测试():
A=3
B=4
定义stu():
C=3
返回一个
返回stu
stu=测试()
斯图(男子名)
在上面的代码中,stu方法是在测试内部定义的,内部函数stu是一个可以使用外部函数test的变量。我们称这种行为为封闭。
1、简单介绍一下闭包
不是Python中的任何代码块都可以引入新的作用域,这与C:
在C中:
# includestdio.h
int main() {
if(2 0) {
int I=0;
}
printf(i=%d ,I);
返回0;
}
在上面的代码中,if子句引入了一个局部作用域,变量I存在于这个局部作用域中,但对外界是不可见的。因此,在printf函数中引用变量I会导致编译错误。
但是,在Python中却并非如此:
如果为真:
i=0
打印I
在上面的代码中,if子句没有引入局部范围,变量I仍然在全局范围内。因此,变量I对于下一个print语句是可见的。
实际上,在Python中,只有模块、类和函数会引入新的作用域,而其他代码块不会。
在Python中,不用在使用变量之前预先声明变量,但在实际使用之前,它必须已经绑定到一个对象上;名称绑定会在当前作用域中引入一个新的变量,而在外部作用域中屏蔽同名的变量,无论名称绑定发生在当前作用域的什么地方。
f()
回溯(最近呼叫):
模块中文件 stdin 的第1行
f中文件 stdin 第2行
NameError:未定义名称“I”
运行结果报错:
NameError:未定义名称“I”
程序运行时,Python首先在函数F的局部范围内寻找变量I,但搜索失败。然后在全局作用域和内置作用域中寻找变量I,但还是失败,最后抛出NameError异常。
def f():
.i=8
.打印(一)
.
f()
八
打印(一)
0
运行结果显示:
8和0
I=8是一个名字绑定操作,在函数F的局部作用域中引入了一个新的变量I,屏蔽了全局变量I,所以F里面的print语句看到的是局部变量I,F外面的print语句看到的是全局变量I。
i=0
def f():
.打印(一)
.i=0
.
f()
回溯(最近呼叫):
模块中文件 stdin 的第1行
f中文件 stdin 第2行
UnboundLocalError:在赋值前引用了局部变量“I”
运行结果报错:
UnboundLocalError:在赋值前引用了局部变量“I”
在上面的例子中,函数f中的变量I是一个局部变量,但是当它被用在print语句中时,它还没有被绑定到任何对象上,所以抛出了一个异常。
2、在Python中,并不是任何代码块都能引入新的作用域
名字绑定发生在以下几种情况之下:
参数声明:参数声明在函数的局部范围内引入了新的变量;赋值操作:变量的初始赋值会在当前作用域引入一个新的变量,后续的赋值操作会重新绑定该变量;类和函数定义:类和函数定义将类名和函数名作为变量引入当前作用域,类体和函数体会形成另一个作用域;Import语句:import语句在当前范围内引入新的变量,通常是在全局范围内;For语句:for语句在当前作用域引入了一个新变量(循环变量);Except语句:except语句在当前作用域引入了一个新的变量(异常对象);
3、在Python中,名字绑定在所属作用域中引入新的变量,同时绑定到一个对象。
本文到此为止。希望能帮到你,也希望你能多关注更多热门IT软件开发工作室的内容!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。