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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql 备份数据库原则_MySQL数据库备份方法说明

    mysql 备份数据库原则_MySQL数据库备份方法说明MySQL数据库备份方法说明更新时间:2007年07月29日17:52:57作者:在数据库表丢失或损坏的情况下,备份你的数据库是很重要的。如果发生系统崩溃,你肯定想能够将你的表尽可能丢失最少的数据恢复到崩溃发生时的状态。有时,正是MySQL管理员造成破坏。管理员已经知道表已破坏,用诸如vi或Emacs等编辑器试图直接编辑它们,这对表绝对不是件好事!备份数据库两个主要方法是用mysqldum…

    2022年6月12日
    47
  • java教程安装_java 安装教程

    java教程安装_java 安装教程直接运行exe可执行程序,默认安装即可;备注:路径可以选其他盘符,不建议路径包含中文名及特殊符号。3、配置环境变量1)新建变量名:JAVA_HOME,变量值:C:\ProgramFiles\Java\jdk1.8.0_112)打开PATH,添加变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin3)新建变量名:CLASSPATH,变量值:.;%JAVA_HOME%…

    2022年7月8日
    27
  • Node入门教程(11)第九章:Node 的网络模块

    Node入门教程(11)第九章:Node 的网络模块

    2022年4月2日
    41
  • 爬虫python入门_python之路pdf

    爬虫python入门_python之路pdfProxyHandler代理器在写爬虫时常常需要做代理IP以反爬虫常用IP有:西刺免费代理:xicidaili.com/nt/快代理:http://kuaidaili.com/代理云:http://dailiyun.com/查看代理的IP:http://www.httpbin.org/ip网站:http://www.httpbin.org/可查看http的一些参数。#检查当前ip…

    2022年7月28日
    6
  • Django(23)Django限制请求装饰器

    Django(23)Django限制请求装饰器前言有时候,我们想要限制访问的请求方法,比如我们希望用户只能通过get方式请求,post不允许,那么我们可以采用装饰器的方式,django已经为我们提供了内置的装饰器限制请求装饰器Django内

    2022年7月29日
    8
  • 电工电子电力拖动及自动化技术考核实训台QY-DG800D[通俗易懂]

    电工电子电力拖动及自动化技术考核实训台QY-DG800D[通俗易懂]一、产品简介QY-DG800D高性能电工电子电拖及自动化技术实训与考核装置是针对我国高等院校、职业技术教育的需求而开发的综合性实训考核装置。装置融合了电工、电子、电力拖动、PLC、变频器等实训内容,配备多块可自由组合的实训挂箱,适用各类职业院校、中专、技校电工、电子、电拖、机电一体化、自动化等专业的教学和从事相关专业的技术人员实训考核。二、产品特点装置实训屏上380V交流输出处设有单片机全程监控的一套过流保护装置,相间、线间直接短路或过载,电流超过设定值,系统即告警并切断总电源,确保设备安全.

    2022年6月6日
    38

发表回复

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

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