python3 nonlocal vs global】的更多相关文章

考虑这样一个python程序: x = 12 def func(): x = 1 func() print(x) 输出为:x = 12 因为函数内部定义的x被认为只属于局部作用域,为了表明我么引用的是全局的x而不是新定义一个局部的x, 可以使用global关键字: x = 12 def func(); global x x = 1 func() print(x) 可以发现输出已经变成了1,也就是在函数内部成功修改了一个全局变量 还有一种情形,就是嵌套的局部作用域的问题: def g(): x =…
nonlocal 与 global nonlocal翻译是非本地,global翻译是全局,它们都是python3的新特性.如果以类C语言的思维去看这2个关键字,很可能觉得它们差不多.但实际上它们很不一样. 下面先说说global.顾名思义,global能将一个变量提升为全局, 但是这个关键字有个特别的语法要求,即不能同时定义和声明,如global a=1. a = 1 def func(): print(a) global a a += 2 # SyntaxWarning: name 'a' i…
1.在函数中声明函数 在内部函数中使用变量的时候, 查找顺序: 先找自己 -> 上一层 -> 上一层..全局 -> 内置 # 函数的互相调用 # def func1(): # print("我是神器的func1") # # def func2(): # func1() # print("我是神器的func2") # # def func3(): # print("我是神器的func3") # # func5() # # def…
获取变量时遵循LEGB原则,修改变量时需要global/nonlocal进行修改 global # global的使用 函数外定义了全局变量: global关键字在函数内会修改全局变量 函数外没定义全局变量: global会在函数内定义全局变量(不管是几层闭包, 只要调用了就会定义) nonlocal .修改当前作用域上一级(局部变量) .如果上一级也没有, 就继续向上 .再找不到, 就会报错(不会到全局变量中寻找) def outer(): a = 1 def inner(): # nonlo…
在Python中,当引用一个变量的时候,对这个变量的搜索是按找本地作用域(Local).嵌套作用域(Enclosing function locals).全局作用域(Global).内置作用域(builtins模块)的顺序来进行的,即所谓的LEGB规则. 然而当在一个函数内部为一个变量赋值时,并不是按照上面所说LEGB规则来首先找到变量,之后为该变量赋值.在Python中,在函数中为一个变量赋值时,有下面这样一条规则: 当在函数中给一个变量名赋值是(而不是在一个表达式中对其进行引用),Pytho…
nonlocal 首先,要明确 nonlocal 关键字是定义在闭包里面的.请看以下代码: x = 0 def outer(): x = 1 def inner(): x = 2 print("inner:", x) inner() print("outer:", x) outer() print("global:", x) 结果 # inner: 2 # outer: 1 # global: 0 现在,在闭包里面加入nonlocal关键字进行声…
1. 执行代码 以下实例都是通过执行以下代码,需要把以下执行代码放在后面实例代码的后面. a = outer_func()print("call a()") a() a() a() b = outer_func()print("call b()") b() b() b() 2. 未使用nonlocal def outer_func(): count = 3 def inner_func(): count += 1 print("count", c…
命名空间 -------‘’存放名字与值的关系”的空间 代码在运行伊始,创建的存储“变量名与值的关系”的空间叫做全局命名空间: 在函数的运行中开辟的临时的空间叫做局部命名空间. 命名空间一共分为三种: 全局命名空间 局部命名空间 内置命名空间 *内置命名空间中存放了python解释器为我们提供的名字:input,print,str,list,tuple...它们都是我们熟悉的,拿过来就可以用的方法. 三种命名空间之间的加载与取值顺序: 加载顺序:内置命名空间(程序运行前加载)->全局命名空间(程…
##################################总结######################################动态参数 *args:位置参数动态传参,接收到的是元祖,传多少都可以,不传也可以 **kwargs:关键字参数动态传参,接收到的是字典 顺序: 位置参数—*args—默认值参数—**kwargs 以上参数可以随意搭配使用 def func(): pass 形参的位置*,** ——聚合 实参的位置*,** ——打散 def hehe(*args,**k…
1. glob.glob() glob模块是Python最简单的模块之一, 内容非常少, 用它可以查找符合特定规则的文件路径名, 查找文件时只会用到三个匹配符: * :匹配0个或多个字符 ? : 匹配单个字符 [] : 匹配指定范围内的字符, 如[0-9]匹配数字 返回的是列表 list类型,是所有路径下的符合条件的文件名的列表: 例子:要对某个文件进行处理,需要使用改函数,得到文件名:参数为相对路径(也可以为绝对路径),指当前目录下的train文件夹下的所有图片 还有我发现glob.glob(…
一.动态参数#形参 有3种动态参数#*args 动态参数,不定长参数def func (*args): print(args,type(args))func(1,2,"alex",3,4,55,5,)#输出结果 (1, 2, 'alex', 3, 4, 55, 5) <class 'tuple'> def func(a,b,c,*args): print(a) print(b) print(c) print(args,type(args))func(1,2,"al…
写在前面: 几乎有一周没有更新学习笔记了吧 上周一周身体都不怎么舒服 然后还得写开题报告 然后还得看文献 天天就是写写写写写写~~~~~~改改改改改改~~~~~~~~~ 今天又开始学习了 希望之前的没忘记 其实今天更新的笔记是上周看的视频 可能忘得差不多了 又重新看的 我这脑子,笨死啦   加油吧!小伙郭 最近在看绝望的主妇,感觉很好看!(每次看美剧美名其曰学英语,~~~~然而,只有自己懂) 一.局部变量和全局变量 全局变量 在程序的一开始顶头定义的变量 作用域是整个程序(全局作用域) 局部变量…
6.函数的动态参数 *args,**kwargs:能接受动态的位置参数和动态的关键字参数 *args -- tuple *kwargs -- dict 动态参数优先级:位置参数 > 动态位置参数 > 默认参数(关键字参数) > 动态关键字参数 1.*.args: ​ 接收动态的位置参数,接受任意多个,定义阶段*为聚合,调用阶段*为打散 def func(a,b,*args):#*.args可以替换,*s print(a,b,args) print(a,b,*args) #*为打散 fun…
一 函数的名称空间 内置空间:存放python解释器内置函数的空间 全局空间:py文件运行时开辟的,存放的是执行的py文件(出去函数内部)的所有的变量与值的对用关系,整个py文件结束后才会消失. 局部空间:函数定义时,会记录下函数名与函数体的对应关系(什么都没有,只要内存地址,只有执行时才会在内存中临时开辟一个临时空间,存放的函数中的变量与值的对应关系,随着函数的结束而消失) 加载顺序:内置空间 > 全局空间 > 局部空间 取值顺序:局部空间 > 全局空间 > 内置空间 作用域 全…
1 nonlocal声明的变量不是局部变量,也不是全局变量,而是外部嵌套函数内的变量.写在内部嵌套函数里面,它实质上是将该变量定义成了全局变量,它等价于用两个global来定义该变量.只不过用两个global来实现太繁琐.只用一个global的话无法在这儿(嵌套函数中)实现. def make_counter(): global count count = 0 def counter(): # nonlocal count global count count += 1 return count…
nonlocal 和 global 也很容易混淆.简单记录下自己的理解. 解释 global 总之一句话,作用域是全局的,就是会修改这个变量对应地址的值. global 语句是一个声明,它适用于整个当前代码块. 这意味着列出的标识符将被解释为全局变量. 尽管自由变量可能指的是全局变量而不被声明为全局变量. global语句中列出的名称不得用于该全局语句之前的文本代码块中. global语句中列出的名称不能定义为形式参数,也不能在 for 循环控制目标.class定义.函数定义.import语句或…
我们经常需要在同一个程序里多次复用代码.函数可以很好的帮助我们完成这一点.我们在函数里写我们要重复做的事,然后我们在任何需要的时候调用它.我们已经看到一些内建的函数,比如 len(),divmod(). 定义一个函数 我们使用关键字 def 来定义一个函数,语法描述如下所示: def 函数名(参数): 语句1 语句2 让我们编写一个函数,它将接受两个整数作为输入,然后返回总和. >>> def sum(a, b): ... return a + b 第二行有个 return 关键字,我们…
一.函数 定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可     特性: 1)代码重用 2)保持一致性 3)可扩展性 参考博客: Py西游攻关之函数 1.函数参数 形参:形式参数,不是实际存在,是虚拟变量.在定义函数和函数体的时候使用形参,目的是在函数调用时接收实参(实参个数,类型应与实参一一对应) 实参:实际参数,调用函数时传给函数的参数,可以是常量,变量,表达式,函数,传给形参 区别:形参是虚拟的,不占用内存空间,.形参变量只有在被调用…
函数基础 1. 速查笔记 #-- 函数相关的语句和表达式 myfunc('spam') # 函数调用 def myfunc(): # 函数定义 return None # 函数返回值 global a # 全局变量 nonlocal x # 在函数或其他作用域中使用外层(非全局)变量 yield x # 生成器函数返回 lambda # 匿名函数 2. 函数的好处 代码复用.保持代码一致性.可扩展性 函数的参数 1. 速查笔记 #-- 函数参数,不可变参数通过“值”传递,可变参数通过“引用”传递…
函数一词起源于数学,但是在编程中的函数和数学中的有很大不同.编程中的函数式组织好的,可重复使用的,用于实现单一功能或相关联功能的代码块. 我们在学习过程中已经使用过一些python内建的函数,如print().但我们也可以自己创建函数,这被叫做用户自定义函数. 函数的特点: 1 代码重用 2 保持一致性 3 便与修改,易扩展 1. 定义一个函数 1.1 python定义函数用def关键字,一般格式如下 def 函数名(参数列表): 函数体 1.2 函数名的命名规则 函数名必须以下划线或字母开头,…
python高级之函数 本节内容 函数的介绍 函数的创建 函数参数及返回值 LEGB作用域 特殊函数 函数式编程 1.函数的介绍 为什么要有函数?因为在平时写代码时,如果没有函数的话,那么将会出现很多重复的代码,这样代码重用率就比较低...并且这样的代码维护起来也是很有难度的,为了解决这些问题,就出现了函数,用来将一些经常出现的代码进行封装,这样就可以在任何需要调用这段代码的地方调用这个函数就行了. 函数的定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其…
在Python中,对象是独立的,不同作用域中的不同名字都可以被绑定在同一个对象上,当然对这个对象的修改会影响所有的引用.赋值操作就是名字和对象的绑定或重绑定.这和C++中的引用是一样的. 1,基础概念 1.1 命名空间(namespace) A namespace is a mapping from names to objects 命名空间是名字和对象的映射.也就是可以把一个namespace理解为一个字典,实际上很多当前的Python实现namespace就是用的字典.各个命名空间是独立的,…
python高级之函数   python高级之函数 本节内容 函数的介绍 函数的创建 函数参数及返回值 LEGB作用域 特殊函数 函数式编程 1.函数的介绍 为什么要有函数?因为在平时写代码时,如果没有函数的话,那么将会出现很多重复的代码,这样代码重用率就比较低...并且这样的代码维护起来也是很有难度的,为了解决这些问题,就出现了函数,用来将一些经常出现的代码进行封装,这样就可以在任何需要调用这段代码的地方调用这个函数就行了. 函数的定义:函数是指将一组语句的集合通过一个名字(函数名)封装起来,…
Python基础-作用域和命名空间(Scope and Namespace) 在Python中,对象是独立的,不同作用域中的不同名字都可以被绑定在同一个对象上,当然对这个对象的修改会影响所有的引用.赋值操作就是名字和对象的绑定或重绑定.这和C++中的引用是一样的. 1,基础概念 1.1 命名空间(namespace) A namespace is a mapping from names to objects 命名空间是名字和对象的映射.也就是可以把一个namespace理解为一个字典,实际上很…
1.函数名的命名规则: 函数名必须以下划线或字母开头,可以包含任意字母.数字或下划线的组合.不能使用任何的标点符号: 函数名是区分大小写的. 函数名不能是保留字. 2. 形参和实参 形参:形式参数,不是实际存在,是虚拟变量.在定义函数和函数体的时候使用形参,目的是在函数调用时接收实参(实参个数,类型应与实参一一对应) 实参:实际参数,调用函数时传给函数的参数,可以是常量,变量,表达式,函数,传给形参 区别:形参是虚拟的,不占用内存空间,.形参变量只有在被调用时才分配内存单元,实参是一个变量,占用…
新闻 管理   Py西游攻关之函数   一 函数是什么? 函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,具体区别,我们后面会讲,编程中的函数在英文中也有很多不同的叫法.在BASIC中叫做subroutine(子过程或子程序),在Pascal中叫做procedure(过程)和function,在C中只有function,在Java里面叫做method. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自…
http://www.linchaoqun.com/html/cms/content.jsp?id=1509528630774 Python3笔记:Python与ECMAScript部分语法对比 https://frankfang.github.io/es-6-tutorials/ ES 6 新特性列表 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference 官方的javascript参考文档 python:支持面向对象…
一. 初识python. 1. 认识计算机 CPU(大脑) 3GHZ + 内存(DDR4) + 主板 + 电源(心脏)+ 显示器 + 键盘 +鼠标+ 显卡 + 硬盘 80MB/s 操作系统 windows 家用 linux 服务器 macOS 家用+服务器 计算机是一个高度集成的电子电路 高低电平. 二进制 二进制没有2 -> 0 1 八进制没有8 -> 0-7 十进制没有10 -> 0-9 十六进制没有16 -> 0-9 A-F 显卡 1. NAVID 看型号. 2. AMD 图…
最开始对名称空间的了解是在学习函数的时候,那时候知道了作用域的查找顺序,以及全局名称空间和局部名称空间,产生疑惑的时候为学递归的时候,那时候还没有名称空间这个概念,只知道递归有个最大深度,那时候以后递归产生的名称空间是一层套一层的,以及类里面的名称空间,所以产生了深究名称空间的想法,这才诞生了这篇博客,本篇博客借鉴了python的命名空间的内容,本人对里面的例子都试验了并发现了一个错误,在类中定义的列表生成式产生的命名空间也可以访问到类属性. 例子 # a.py lis = ['musibii'…
这个是从网上找到的一份快速入门python的极简教程,大概一千行左右,个人觉得不错,特此收藏以备后用. # _*_ coding: utf-8 _*_ """类型和运算----类型和运算----类型和运算----类型和运算----类型和运算----类型和运算----类型和运算----类型和运算----类型和运算----类型和运算----类型和运算""" #-- 寻求帮助: dir(obj) # 简单的列出对象obj所包含的方法名称,返回一个字符串…