Python 关键字之 nonlocal

在Python 3.x中增加了nonlocal关键字,关于变量的声明,引自官方文档

Assignment of an object to a single target is recursively defined as follows.

If the target is an identifier (name):

  • If the name does not occur in a global or nonlocal statement in the current code block: the name is bound to the object in the current local namespace.

  • Otherwise: the name is bound to the object in the global namespace or the outer namespace determined by nonlocal, respectively.

在当前作用域/代码块中,一个变量如果没有用关键字global或者nonlocal声明,则是局部变量,否则它是一个全局(global)变量 或者是外层作用域的非局部(nonlocal)变量。

python中引用变量的顺序: 当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变量

注:如果只是引用全局变量或者外部变量,而不改变值的话,可以不加关键字,如果要改变值,则需要用关键字声明,否则会抛出error

example:

1 g_count = 5
2
3 def test1():
4     x = g_count + 5
5     return x
6
7 print(test1()) # 输出 10

1 g_count = 5
2
3 def test1():
4     #global g_count  不用global声明,会出现错误
5     g_count += 2
6     return g_count
7
8 print(test1())

UnboundLocalError: local variable ‘g_count‘ referenced before assignment,局部变量在定义之前被引用。

noncal关键字的使用

example:

 1 def test3():
 2     counter = 0
 3     def sub_test():
 4         nonlocal counter
 5         counter += 2
 6         return counter
 7     return sub_test
 8
 9
10 f = test3()
11 print(f())  # ==>2
12 print(f())  # ==>4
13 print(f())  # ==>6

时间: 2024-10-05 12:16:56

Python 关键字之 nonlocal的相关文章

part2:Python 变量及简单类型,print 函数介绍,Python 关键字、内置函数介绍

Python是弱类型语言,关于弱类型有两个含义:(1).所有的变量无须声明即可使用,或者说对从末用过的变量赋值就是声明了该变量:(2).变量的数据类型可以随时改变,同一个变量可以进行多次赋值,可以赋数值型和字符串型值. 一. 单行注释和多行注释 注释可提高程序可读性,用于解释某行或某部分程序的作用和功能.此外注释也是调试程序的重要方式,在调试时可将不希望编译.执行的代码注释掉.注释还可以为别人或自己过一段时间后能读懂代码的目的提供帮助.合理的代码注释占源代码 1/3 左右. Python语言不能

python 关键字和内置函数

Python关键字(保留字)一览表 来自 http://c.biancheng.net/view/4188.html 保留字是 Python 语言中一些已经被赋予特定意义的单词,这就要求开发者在开发程序时,不能用这些保留字作为标识符给变量.函数.类.模板以及其他对象命名. 表 1 Python 保留字一览表 and as assert break class continue def del elif else except finally for from False global if im

python 学习笔记 7 -- Python关键字总结

0.写在前面的话 学习一门语言最重要的功课是练习与复习,在<笨方法学Python>中第三十七节虽然没有教你任何内容,但是它提醒我们:"学了这么多,你还能记得多少?该复习了!" 下面我们就对这一节的第一部分"关键字"来做个复习: Python中的关键字包括如下: and       del        from      not      while    as        elif       global    or       with     

python关键字、转义符和字符串格式化

最近在学learn python the hard way,学习到第37章,进行了关于关键字.转义符和字符串格式化的总结.看手头上的中文版没有及时更新.于是就把这些翻译过来,以作查阅. 关键字: 关键字 描述 例子 and 逻辑与 True and False == False as 作为with-as语句的一部分 with X as Y: pass assert 保证某些事情为真 assert False, "Error!" break 马上停止循环 while True: brea

Python关键字yield的解释(stackoverflow)

3.1. 提问者的问题 Python关键字yield的作用是什么?用来干什么的? 比如,我正在试图理解下面的代码: def node._get_child_candidates(self, distance, min_dist, max_dist): if self._leftchild and distance - max_dist < self._median: yield self._leftchild if self._rightchild and distance + max_dist

python关键字

python有多少关键字? >>> import keyword >>> keyword.kwlist ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'o

python关键字is与 ==的区别

python关键字is与 ==的区别 最近在学习Python,总结一下小知识点. Python中的对象包含三要素:id.type.value 其中id用来唯一标识一个对象,type标识对象的类型,value是对象的值 is判断的是a对象是否就是b对象,是通过id来判断的 ==判断的是a对象的值是否和b对象的值相等,是通过value来判断的 示例如下: >>> a=100 >>> b=100.0 >>> a is b False >>>

python 关键字参数和可变参数*args,和**kw

python 关键字参数和可变参数*args,和**kw 觉得有用的话,欢迎一起讨论相互学习~Follow Me 感谢莫烦老师 详情 可变参数 顾名思义,函数的可变参数是传入的参数可以变化的,1个,2个到任意个.当然可以将这些 参数封装成一个 list 或者 tuple 传入,但不够 pythonic.使用可变参数可以很好解决该问题,注意可变参数在函数定义不能出现在特定参数和默认参数前面,因为可变参数会吞噬掉这些参数. def report(name, *grades): total_grade

Python迭代器和关键字 global ,nonlocal

1.关键字 global : 可以修改全局变量 可以在局部作用域声明一个全局变量,剪切 : 此时局部作用域没有该变量,全局作用域中有 name = 1 def func(): global name name += 1 print(globals()) func() print(name) print(globals()) nonlocal : 不能操作全局变量 可以对父级作用域的变量进行修改,并且在当前作用域创建(复制)一分此变量 # 这是复制 # def func(): # count =