python中 global_python中round的用法

python中 global_python中round的用法在Python中,一个变量的scope范围从小到大分成4部分:LocalScope(也可以看成是当前函数形成的scope),EnclosingScope(简单来说,就是外层函数形成的scope),GlobalScope(就是当前文件形成的scope),BuiltinsScope(简单来说,就是Python内置的变量位于最顶层的scope)。当Python开始查找一个非限定的变量名时(像ob…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

在Python中,一个变量的scope范围从小到大分成4部分:Local Scope(也可以看成是当前函数形成的scope),Enclosing Scope(简单来说,就是外层函数形成的scope),Global Scope(就是当前文件形成的scope),Builtins Scope(简单来说,就是Python内置的变量位于最顶层的scope)。当Python开始查找一个非限定的变量名时(像obj.attr中的attr,就是一个被限定的变量名字,它被限定在obj对象中,而普通的变量名就是没有限定的),总是从当前变量名所处的scope开始,顺着前面提到的scope链开始往上查找,一旦查找到就不会往上再继续查找,如果查找完整个scope链还是没找到,Python会报错。

上面提到的变量名查找顺序,可以简单的记为LEGB(每一个scope的首字母),而global和nonlocal,可以改变查找顺序。

global

在文件中声明的变量自动成为global的,而如果想在一个函数里面声明一个全局变量,就需要使用global关键字:

global var1, var2, … #多个变量用逗号隔开

对于global关键字,需要注意以下几点:

1 当Python看到一个变量由global变量声明,开始查找的scope不是从这个变量当前所在的scope开始查找,而是从Global Scope开始查找;如果Global Scope没有找到,就会继续到Builtins Scope查找;

2 global关键字声明的对象允许赋值,如果这个变量之前不存在,那么,这次赋值就是创建了一个全局变量;如果这个变量之前存在,那么,这次赋值就改变了这个全局变量的值:

deftest():globalx

x= 1 #x之前不存在,因此在Global Scope创建了一个全局变量x

x= 1

deftest():globalx

x= 99 #x之前在Global Scope中已经存在,因此这里是改变x的值

3 只要被global关键字声明的变量,都会成为全局变量,如果该变量原来不是全局变量,也会如此,并且,如果之前Global Scope里面有同名变量,那么被global声明的变量会取代这个同名变量:

x = 99

deftest():

x= 88

global x #这样做的话Python会产生警告:SyntaxWarning: name ‘x’ is assigned to before global declaration

>>>print(x) #一开始访问的是全局变量x

>>>99

>>>test() #执行test函数之前,原本函数里面的局部变量x成为了全局变量,并取代原来的全局变量

>>>print(x) #现在访问的是取代后的全局变量x,值变为88

>>>88

#在看一个例子,加入开始没有定义全局变量x

deftest():

x= 88

global x #仍会产生相同的警告

>>>test()>>>print(x) #打印结果为88!!!

>>>88

nonlocal

nonlocal是Python 3.X加入进来的关键字,Python 2.X中没有。在Python中,嵌套函数是可以访问外部函数的变量的(至少在>Python 2.2的版本是这样的,在Python 2.2之前的版本中,变量的查找从当前函数开始,然后直接到Global Scope,Builtins Scope,跳过了外层函数),但是却不可以改变外部函数变量的值,如果确实要改变,就的使用nonlocal变量进行声明:

nonlocal var1, var2,… #只在Python 3.X中支持,多个变量用逗号隔开

对于nonlocal关键字,需要注意以下几点:

1 nonlocal关键字只在Python 3.X中支持,Python 2.X没有这个关键字;

2 nonlocal关键字只可以在函数内部使用,在其他地方使用会报错;

3 nonlocal声明的变量,之前必须已经存在(并且是在外部函数中存在),如果变量不存在就对这个变量赋值,会报错,这点和global关键字不一样:

#变量存在于Global Scope

x = 99

deftest():

nonlocal x#报错:SyntaxError: name ‘x’ is assigned to before nonlocal declaration

#变量存在于当前函数

deftest():

x= 99nonlocal x#报错:SyntaxError: name ‘x’ is assigned to before nonlocal declaration

4 对于nonlocal声明的变量,只会在外部函数中查找该变量,不会在Global Scope和Builtins Scope中查找

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/197869.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 网络传真文档转换「建议收藏」

    网络传真文档转换「建议收藏」
    进公司不久,就到一个棘手的任务,公司决定对原有网络传真文档转换进行改造,原有方案是通过虚拟打印,这家伙有几个不好的地方
    1。只能运行在win系列上。
    2。 虚拟打印只能同步访问,需要排队等候
    3,   不稳定,经常需要重启
    经过将近一个月的摸索与研究,现将思路与实现方案记录下来。
    首先通过openoffice一个开源项目jodconverter将office系列文档转换成pdf。
    然后通过ghostscript将pdf转换成传真

    2022年6月28日
    27
  • MyBatis-Spring整合 注入SqlSessionTemplate

    MyBatis-Spring整合 注入SqlSessionTemplateSqlSessionTemplateSqlSessionTemplate是MyBatis-Spring的核心。这个类负责管理MyBatis的SqlSession,调用MyBatis的SQL方法,翻译异常。SqlSessionTemplate是线程安全的。最终要的是让spring获取到SqlSessionTemplate然后注入给工具类,让工具类操作数据库

    2022年5月31日
    51
  • 基于zigbee的智能管理系统[通俗易懂]

    1.管理系统功能2.设备信息页面3.系统总体原理图4.说明上图已经说明了系统中需要使用的哪些技术,下面就挨着介绍下。统分为4部分分别是:1:客户端:2:服务器3:网关4:终端设备:先来介绍终端设备吧,终端设备主要指点灯,温度传感器,光照传感器,烟雾传感器灯设备,是使用了cc2530芯片,内部只带无线…

    2022年4月14日
    30
  • js中clientWidth、scrollLeft、offsetX等宽高度和位置的用法

    js中clientWidth、scrollLeft、offsetX等宽高度和位置的用法文章目录前言一、clientWidth/clientHeight二、clientLeft/clientTop三、clientX/clientY四、scrollWidth/scrollHeight五、scrollLeft/scrollTop六、offsetWidth/offsetHeight七、offsetLeft/offsetTop八、offsetX/offsetY总结前言前端学习中会遇到的一些宽高度,位置的计算提示:以下是本篇文章正文内容,下面案例可供参考.b.

    2022年7月22日
    8
  • 网页返回顶部的几种方法

    网页返回顶部的几种方法

    2021年11月4日
    53
  • 一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD「建议收藏」

    一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD「建议收藏」一文读懂目标检测:R-CNN、FastR-CNN、FasterR-CNN、YOLO、SSD前言之前我所在的公司七月在线开设的深度学习等一系列课程经常会讲目标检测,包括R-CNN、FastR-CNN、FasterR-CNN,但一直没有比较好的机会深入(但当你对目标检测有个基本的了解之后,再看这些课程你会收益很大)。但目标检测这个领域实在是太火了,经常会看到一些写的不…

    2022年6月11日
    30

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号