python中变量的作用域,python定义域

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: