首页 > 编程知识 正文

python有什么用,python变量按其作用域可分为

时间:2023-05-06 02:30:13 阅读:117011 作者:2482

Python范围最近在解答Leetcode问题时,自己觉得Python的范围很模糊,什么时候打开self,什么时候使用global nonlocal关键字,完全是黑的,所以关于它

LEGB提到了Python作用域,最重要的是LEGB原则。

L:local、局部范围,即由函数定义的变量E:enclosing、嵌套父函数的局部范围。 这意味着包含此函数的上级函数的局部范围,但不是全局的。 G:globa、全局变量、在模块级别定义的变量b ) B:built-in、系统固定模块中的变量,例如int、bytearray等。 搜索变量的优先级为作用域局部外层作用域当前模块中的全局python内置作用域,即LEGB。

一个例子可以看到四个范围:

x=int(3.9 ) #int built-in,系统固定模块中的变量; g_count=10 #globa,全局变量; def outer (: e _ count=1# enclosing,包含该函数的上级函数的局部范围,但不是全局的; definner(:l_count=2#local、本地范围和函数定义的变量; print(o_count ) inner )、outer )、local和enclosing是相对的,enclosing变量相对于上层也是local。

因此,如果内部范围想要更改外部范围的变量,则必须使用global nonlocal关键字。

在全局范围变量的修改子函数中,声明要更改的变量为global。

计数=20 def outer (:全局计数)计数(计数=200打印计数) outer ) )

使用global关键字声明的外部嵌套函数范围变量必须位于全局范围中,并且不能嵌套在范围中。 如果要更改“嵌套范围”(enclosing )变量,请使用nonlocal声明。

defouter(:num=20definner ) : nonlocalnumnum=100 print (num ) inner (print ) num (outer ) )。

范围生成在Python中进行,并且只有模块(module )、类)和函数(def、lambda )被引入到新范围中。

类似if try for的代码块不会引入新的作用域。

牢记LEGB原则

self指向类的实例。 因此,self.xx是此实例的属性,可以从类内部访问。

顺便说一下,此原则似乎只针对int string等变量,但在enclosing范围中声明对象或数组时,无需在子函数中使用nonlocal函数即可访问。

以上,明确了Python的范围概念。 在解决未来Leetcode问题的过程中,再也不会出现无法访问变量的尴尬情况了吧。

参考python范围,变量范围_孤独根号-CSDN博客_python变量范围

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。