Python函数中的作用域规则实例分析


这篇文章主要介绍了Python函数中的作用域规则实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python函数中的作用域规则实例分析文章都会有所收获,下面我们一起来看看吧。Python是静态作用域语言,但是它自身是一个动态语言。在Python中变量的作用域是由变量在代码中的位置决定的,与C语言有些相似,但不是完全一样。在Python 2.0及之前的版本中,Python只支持3种作用域,即局部作用域,全局作用域,内置作用域;在Python
2.2中,Python正式引入了一种新的作用域 — 嵌套作用域;嵌套作用域的引入,本质上为Python实现了对闭包的支持。在上述此代码中stu方法定义在test的内部,内部函数stu即可以使用外部函数test的变量,我们称这种行为叫做闭包。Python中不是任何代码块都可以引入新的作用域这与C有很大的不同:在C中:在上述代码中,if子句引入了一个局部作用域,变量i就存在于这个局部作用域中,但对外不可见,因此,接下来在printf函数中对变量i的引用会引发编译错误。但是,在Python中却并非如此:在上述代码中,if子句并没有引入一个局部作用域,变量i仍然处在全局作用域中,因此,变量i对于接下来的print语句是可见的。实际上,在Python中,只有模块,类以及函数才会引入新的作用域,其它的代码块是不会引入新的作用域的。在Python中,使用一个变量之前不必预先声明它,但是在真正使用它之前,它必须已经绑定到某个对象;而名字绑定将在当前作用域中引入新的变量,同时屏蔽外层作用域中的同名变量,不论这个名字绑定发生在当前作用域中的哪个位置。运行结果报错:NameError: name ‘i’ is not defined程序运行时,Python首先在函数f的本地作用域中查找变量i,查找失败,接着在全局作用域和内置作用域中查找变量i,仍然失败,最终抛出NameError异常。运行结果显示:8和0i = 8是一个名字绑定操作,它在函数f的局部作用域中引入了新的变量i,屏蔽了全局变量i,因此f内部的print语句看到的是局部变量i,f外部的print语句看到的是全局变量i。运行结果报错:UnboundLocalError: local variable ‘i’ referenced before assignment在上述中,函数f中的变量i是局部变量,但是在print语句使用它的时候,它还未被绑定到任何对象之上,所以抛出异常。名字绑定发生在以下几种情况之下:参数声明:参数声明在函数的局部作用域中引入新的变量;赋值操作:对一个变量进行初次赋值会在当前作用域中引入新的变量,后续赋值操作则会重新绑定该变量;类和函数定义:类和函数定义将类名免费云主机域名和函数名作为变量引入当前作用域,类体和函数体将形成另外一个作用域;import语句:import语句在当前作用域中引入新的变量,一般是在全局作用域;for语句:for语句在当前作用域中引入新的变量(循环变量);except语句:except语句在当前作用域中引入新的变量(异常对象);关于“Python函数中的作用域规则实例分析”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Python函数中的作用域规则实例分析”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注百云主机行业资讯频道。

相关推荐: 微信小程序API模板消息这么使用

这篇文章主要讲解了“微信小程序API模板消息这么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“微信小程序API模板消息这么使用”吧! 步骤一:获取模板ID 有两个方法可以获取模版ID 通过模版消息管理接口获…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 01/14 11:33
下一篇 01/14 11:33

相关推荐