Python----global和nolocal关键字的用法

2023-10-30

【原文链接】

1、global的作用

global的作用就是将变量声明为全局变量

这个问题在面试中非常常见,经常会有面试官问,如下代码打印结果是啥

var=10
def func():
    var=var+20
    print("inner:",var)

print(var)
func()
print(var)

分析:其实这段代码真正执行的时候是会报错的,提示在第三行的位置var未定义,这是因为第一行定义的var为全局变量,而在第三行中=右侧的var为局部变量,此变量在函数局部内确实未定义,这就是这段代码报错的原因,解决这个问题的方法就是在第三行代码之前,用global关键将var声明为全局变量
如下:

var=10
def func():
    global  var
    var=var+20
    print("inner:",var)

print(var)
func()
print(var)

执行结果如下:

10
inner: 30
30

这里需要记住的一个关键点是,全局变量在函数局部区域内,不能出现在赋值符号=的右侧,但是如果没有赋值符号,比如直接打印,这时又是可见的,如下:

var=10
def func():
    print("inner:",var)
print(var)
func()
print(var)

执行结果为:

10
inner: 10
10

如果在函数局部区域内对和全局变量同名的变量重新赋值时,注意此时赋值的并不是全局变量,而是一个全新的局部变量,而全局变量并未发生变化,如下:

var=10
def func():
    var=20
    print("inner:",var)

print(var)
func()
print(var)

此时执行结果为:

10
inner: 20
10

2、nonlocal的作用

  • nonlocal的作用是声明既不是全局变量,也不是局部变量
  • 如下代码,虽然使用global声明var,但是代码还是报错的,这是因为这里的var变量并不是全局变量,同时在最内层函数中也不是局部变量,在这种情况下就需要nonlocal关键字类声明
def outer():
    var=10
    def inner():
        global var
        var=var+20
        print("in inner:",var)
    print(var)
    inner()
    print(var)

outer()

如下代码:使用nonlocal声明之后,就可以正常执行了,这就是nonlocal关键字的作用

def outer():
    var=10
    def inner():
        nonlocal var
        var=var+20
        print("in inner:",var)
    print(var)
    inner()
    print(var)

outer()

执行结果如下:

10

in inner: 30

30
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python----global和nolocal关键字的用法 的相关文章

  • 没有任何元数据的 zip 文件

    我想找到一种简单的方法来压缩一堆文件 而无需任何文件元数据 例如时间戳 这zip命令似乎总是保留元数据 我没有找到禁用元数据的方法 我希望解决方案是一个命令或最多一个 python 脚本 谢谢 正如一些帖子已经指出的那样 zip 标头中的大
  • 如何在Python中循环并存储自变量中的值

    我对 python 很陌生 所以这听起来可能很愚蠢 我进行了搜索 但没有找到解决方案 我在 python 中有一个名为 ExcRng 的函数 我可以对该函数执行什么样的 for 循环 以便将值存储在独立变量中 我不想将它们存储在列表中 而是
  • 如何确定非阻塞套接字是否真正连接?

    这个问题不仅限于Python 这是一个一般的套接字问题 我有一个非阻塞套接字 想要连接到一台可访问的机器 在另一端 该端口不存在 为什么 select 仍然成功 我预计会超时 sock send 因管道损坏而失败 select 之后如何确定
  • Tensorflow 可变图像输入大小(自动编码器、放大......)

    Edit WARNING不建议使用不同图像大小的图像 因为张量需要具有相同的大小才能实现并行化 我一直在寻找解决方案 了解如何使用不同大小的图像作为神经网络的输入 Numpy 第一个想法是使用numpy 然而 由于每个图像的大小不同 我无法
  • 在python中将文本文件解析为列表

    我对 Python 完全陌生 我正在尝试读取包含单词和数字组合的 txt 文件 我可以很好地读取 txt 文件 但我正在努力将字符串转换为我可以使用的格式 import matplotlib pyplot as plt import num
  • Python 3 __getattribute__ 与点访问行为

    我读了一些关于 python 的对象属性查找的内容 这里 https blog ionelmc ro 2015 02 09 understanding python metaclasses object attribute lookup h
  • python 中分割字符串以获得一个值?

    需要帮助 假设我在名为 input 的变量中有一个字符串 Sam Person name kind input split 通过执行上述操作 我得到两个具有不同字符串 Sam 和 Person 的变量 有没有办法只获取第一个值 name S
  • 带图像的简单 GUI [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我试图在简单的 GUI 上显示一些卡
  • 为什么 Python 中的“pip install”会引发语法错误?

    我正在尝试使用 pip 安装软件包 我试着跑pip install从Python shell 但我得到了SyntaxError 为什么我会收到此错误 如何使用 pip 安装软件包 gt gt gt pip install selenium
  • sudo pip install python-Levenshtein 失败,错误代码 1

    我正在尝试在 Linux 上安装 python Levenshtein 库 但每当我尝试通过以下方式安装它时 sudo pip install python Levenshtein 我收到此错误 命令 usr bin python c 导入
  • 如何通过双击在浏览器中打开 ipynb 文件

    以前 我安装了 Canopy 当时 我只需双击 ipynb 文件并在浏览器中打开它们即可 但是 后来我需要Anaconda 一旦我安装了它 这个功能就没有了 现在我只希望能够简单地双击 ipynb 文件 然后该文件就会在 Firefox 中
  • matplotlib matshow 标签

    我一个月前开始使用 matplotlib 所以我仍在学习 我正在尝试用 matshow 制作热图 我的代码如下 data numpy array a reshape 4 4 cax ax matshow data interpolation
  • Python 中的 @staticmethod 与 @classmethod

    方法和方法有什么区别装饰的 https peps python org pep 0318 with staticmethod http docs python org library functions html staticmethod和
  • 如何在Python和Selenium中通过标签名称或id获取元素[重复]

    这个问题在这里已经有答案了 我正在尝试使用 Python 和 Selenium 获取输入 但它向我显示错误 我该如何解决这个错误 inputElement send keys getStock getStocklFunc 0 Error i
  • 无法截取宽度为 0 的屏幕截图

    我正在尝试截取 Bootstrap 模态内元素的屏幕截图 经过一番努力 我终于想出了这段代码 driver get https enlinea sunedu gob pe driver find element by xpath div c
  • 导入错误:没有名为 google.auth 的模块

    当我尝试导入时firebase admin in python 2 7我收到错误 导入错误 没有名为 google auth 的模块 这是Docker文件 https github com ammaratef45 Attendance bl
  • 查找给定节点的最高权重边

    我在 NetworkX 中有一个有向图 边缘的权重从 0 到 1 表示它们发生的概率 网络连通性非常高 所以我想修剪每个节点的边缘 只保留最高概率的节点 我不确定如何迭代每个节点并仅保留最高权重in edges在图中 有没有一个networ
  • Flask WTForms 使用变量自动填充 StringField

    我有一个表格 我想用上一页收到的信息自动填充一些字段 但如果他们想调整它 它需要是可更改的 我正在为我的 SelectField 使用动态创建的列表 但添加 StringField 并不成功 请参阅下面的我的代码 forms py clas
  • 为什么我们应该在 def __init__(self, n) -> None: 中使用 -> ?

    我们为什么要使用 gt in def init self n gt None 我读了以下摘录来自 PEP 484 https www python org dev peps pep 0484 the meaning of annotatio
  • 在 Python 模块中使用 InstaLoader

    我正在尝试使用 Instaloader 下载与主题标签相关的照片以进行图像分析 我在GitHub存储库中找到了一个全面的方法 如何在终端中执行它 但是 我需要将脚本集成到Python笔记本中 这是脚本 instaloader no vide

随机推荐

  • phpstorm Cannot find declaration to go to 解决办法

    点击file gt invalidate caches restart 重启一下idea即可
  • Java中的注释(以IDEA示例,含快捷键)

    1 单行注释 public void sing 这是一条注释语句 System out println 接受自己的平凡 不仅仅是java 其它几乎所有很多主流语言 都可以使用两个 进行注释 友情提醒 据说一般大厂的技术要求是 单行注释要写在
  • 趣谈网络协议-应用层(P2P协议)

    一 FTP 1 概述 FTP 文件传输协议 使用两个TCP连接来传输文件 控制连接 客户端主动发起连接 服务端被动打开21端口 改连接将客户端命令传送给服务器 并回传服务器应答 list 获取文件目录 reter 取一个文件 store 存
  • HTTP面试题(二):HTTP请求报文和响应报文格式

    文章目录 HTTP请求报文和响应报文格式 1 请求报文 2 响应报文 3 常见的首部字段 HTTP请求报文和响应报文格式 1 请求报文 请求报文包含四个部分 请求行 包含HTTP版本号 请求方法 URI 请求首部字段 请求内容实体 空行 2
  • JUC快速学习笔记

    JUC快速学习笔记 狂神说JUC 个人学习笔记 介绍 JUC是指javaUtil包中的三个操作线程的包 并发操作 不加锁 方法 属性 方法 private int number 50 买票的方式 public void norSale if
  • 单调栈的及二维单调栈求面积

    单调栈模板 include
  • 线程安全、简单的单例编写

    单例的特性 一 构造方法私有 二 定义SingleInstance 类型属性 一 不安全的单例 public class SingleInstance private static SingleInstanceinstance null p
  • UE5 设置新打开的资产窗口默认停靠在主窗口

    文章目录 前言 方式一 设置工程文件 方式二 设置引擎文件 前言 本文以虚幻引擎5 2 0为例 不同版本的 EditorPerProjectUserSettings ini 文件所在的目录可能不一致 方式一 设置工程文件 编辑器设置 编辑
  • 4到20ma模拟量转换公式_【工控】西门子S7-200学习笔记 第三课 模拟量的使用

    一 S7 200 模拟量使用简介 S7 200系列产品可以采集标准的电压 电流模拟量信号和热电偶 热电阻温度传感器信号 普通的电压和电流信号经过A D转换成为0 32000 或者 32000 32000 之间的整数 温度传感器信号被直接转换
  • 记一次golang cpu 占用100%

    最近重新部署了下测试服务器 发现其负载达到了4 cpu 使用率达到了100 吓的瑟瑟发抖 马上起来查看情况 1 想到了使用go性能查看工具 pprof 因为项目是用gin开发的 所在直接安装了 github com gin contrib
  • 卷积神经网络基础

    一 卷积 本来想自己写一点 发现了很不错的一篇博客 就不班门弄斧了 什么是卷积 知乎 一句话概括 某一时刻 某点的能量 或值 等于多个其他点的叠加 二 卷积神经网络基础 CNN的核心思想 如果简单采用全连接的方式去训练模型 参数量过多难以训
  • 游戏手机连接服务器没有响应时间,雷军:黑鲨游戏手机2响应时间58.9ms,超iPhone...

    IT之家3月18日消息 今天 黑鲨推出新款黑鲨游戏手机2 这款手机起售价为3199元 共有暗影黑和冰封银两种颜色可选 对于这款刚发布的新机型 雷军大赞 操控之王 雷军表示 手起枪响 在高速摄像机镜头下 iPhone响应时间为80ms 黑鲨2
  • 为什么选用 Scala

    为什么选用 Scala 当今的企业和互联网应用程序必须平衡一系列的要点 它们要有快速而可靠的实现 新的功能要能在短时间内通过周期渐进的方式加入 除了简单地提供商务逻辑之外 应用程序必须支持访问安全控制 数据持久化 事务 和其它的进阶功能 程
  • nginx配置websocket反向代理

    设置 nginx增强理解 nginx增加下面的配置 location ver proxy http version 1 1 proxy set header Upgrade http upgrade proxy set header Con
  • APP外包开发第三方登录

    APP开发过程中往往需要对接第三方的登录 国内的有微信 QQ 微博等 国外的有google facebook等账号 对接第三方账号登录SDK可以方便用户快捷登录 是APP登录功能里一项重要的特性 今天和大家分享对接流程和注意事项 希望对大家
  • Git团队协作及分支策略

    目录 分布式版本控制系统 访问模型 分支策略 Git flow 分支策略 Github flow 分支策略 Gitlab flow 主干开发模式 总结 分布式版本控制系统 分布式相比于集中式的最大区别在于开发者可以提交到本地 每个开发者通过
  • 删除链表的中间节点 Java实现_【链表问题】删除单链表的中间节点

    前言 以专题的形式更新刷题贴 欢迎跟我一起学习刷题 相信我 你的坚持 绝对会有意想不到的收获 每道题会提供简单的解答 如果你有更优雅的做法 欢迎提供指点 谢谢 题目描述 给定链表的头节点head 实现删除链表的中间节点的函数 例如 步删除任
  • IDEA中单元测试@Test的设置

    1 打开IDEA File gt Project Structure 2 点到Modules gt Dependencies 点击 3 点击第一个 4 找到你安装IDEA的路径 4 找到这两个jar包 5 点击OK 6 测试
  • vscode使用Ctrl+s保存按Eslint风格自动格式化js/vue/React代码(2020/03/04更新)

    一 使用vscode下载两个插件 1 ESlint 项目中没有装eslint 就不用装这个插件了 2 vetur 另 多余的格式化插件一定要删掉 二 改配置 打开设置如下 覆盖原来的代码 有注释可根据个人喜好修改 不要总是把代码复制过去 看
  • Python----global和nolocal关键字的用法

    原文链接 1 global的作用 global的作用就是将变量声明为全局变量 这个问题在面试中非常常见 经常会有面试官问 如下代码打印结果是啥 var 10 def func var var 20 print inner var print