python函数中如何修改全局变量

news2024/9/23 6:37:24

所谓全局变量,其实就是相对于局部变量而说的。全局变量是定义在整个文件层次上的,可以在文件内的任何地方被访问,包括函数内部。

DEFAULT_DB_NAME= "ss"
def get_connection():
    print(DEFAULT_DB_NAME)
if __name__ == '__main__':
    get_connection()

输出结果:

ss

但是当我改写程序如下:

DEFAULT_DB_NAME= "ss"
def check_dbname(db_name):
    DEFAULT_DB_NAME += db_name
    print(DEFAULT_DB_NAME)
if __name__ == '__main__':
    check_dbname('aa')

这时候程序竟然报错了!
UnboundLocalError: local variable ‘DEFAULT_DB_NAME’ referenced before assignment
在这里插入图片描述
这是因为作为全局变量,我们不能在函数内部随意改变它的值。如果一定要在函数内部改变全局变量的值,就必须加上global这个声明。代码如下:

DEFAULT_DB_NAME= "ss"
def check_dbname(db_name):
    global DEFAULT_DB_NAME
    DEFAULT_DB_NAME += db_name
    print(DEFAULT_DB_NAME)
if __name__ == '__main__':
    check_dbname('aa')

这里的 global 关键字,并不表示重新创建了一个全局变量 DEFAULT_DB_NAME,而是告诉 Python 解释器,函数内部的变量 DEFAULT_DB_NAME,就是之前定义的全局变量,并不是新的全局变量,也不是局部变量。这样,程序就可以在函数内部访问全局变量,并修改它的值了。

好,我们再看一段代码:

DEFAULT_DB_NAME= "ss"
def check_dbname(db_name):
    DEFAULT_DB_NAME = db_name
    print(DEFAULT_DB_NAME)
if __name__ == '__main__':
    check_dbname('aa')

输出结果:

aa

猛地一看,特别是之前搞过java或者go的同学,这不是在函数内部也能修改全部变量吗,根本就不需要加global啊!那么事实是这样吗?
其实在函数内部的DEFAULT_DB_NAME 其实是个重新定义的局部变量。这里有个原则:
函数内部局部变量和全局变量同名的情况,那么在函数内部,局部变量会覆盖全局变量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1942999.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ —— 关于模板初阶

1.什么是模板 在C中,模板(template)是一种通用的编程工具,允许程序员编写通用代码以处理多种数据型或数据结构,而不需要为每种特定类型编写重复的代码,通过模板,可以实现代码的复用和泛化提高代…

Python GUI Maker:拖拽式生成Tkinter GUI 界面的设计工具,让Tkinter开发变得专业高效

简介 Python 是一门极其流行和强大的编程语言,其简洁优雅的语法以及丰富的标准库和第三方库,使其在各个领域都广受欢迎。其中,Tkinter 是 Python 内置的图形用户界面(GUI)库,是构建 Python GUI 应用程序的事实标准。Tkinter 提供了创建窗口、添加控件、处理事件等基本功能,但对…

SQL 简单查询

目录 一、投影查询 1、指定特定列查询 2、修改返回列名查询 3、计算值查询 二、选择查询 1、使用关系表达式 2、使用逻辑表达式 3、使用 BETWEEN关键字 4、使用 IN关键字 5、使用 LIKE关键字 6、使用 IS NULL/ NOT NULL关键字 7、符合条件查询 三、聚合函数查询 一…

深度学习 —— 个人学习笔记6(权重衰减)

声明 本文章为个人学习使用,版面观感若有不适请谅解,文中知识仅代表个人观点,若出现错误,欢迎各位批评指正。 十三、权重衰减 使用以下公式为例做演示: y 0.05 ∑ i 1 d 0.01 x i ε w h e r e ε ~ N…

勇闯高龄“禁区”,四川眼科医院成功为95岁高龄老人实施泪道手术

一吹风就流泪、眼角总有擦不干净的分泌物……很多人以为这只是个滴眼药就能解决的小问题。其实不然,“不起眼”的疾病发展严重时可能还会需要手术治疗。 近日,四川眼科接诊了一位眼泪汪汪的耄耋老人张奶奶(化名),此次…

vue2 使用代码编辑器插件 vue-codemirror

vue 使用代码编辑器插件 vue-codemirror 之前用过一次,当时用的一知半解的,所以也没有成文,前几天又因为项目有需求,所以说有用了一次,当然,依旧是一知半解,但是还是稍微写一下子吧!…

学习测试10-4自动化 web自动化

网页资源 链接: https://pan.baidu.com/s/17XL2c2lkw_R6BD–VnOQqw?pwd43dr 提取码: 43dr 复制这段内容后打开百度网盘手机App,操作更方便哦 框架之间切换 driver.switch_to.frame("idframe1") # 父切子 参数用id和name# 子切子必须先转回父 driver.sw…

数据分析:微生物数据的荟萃分析框架

介绍 Meta-analysis of fecal metagenomes reveals global microbial signatures that are specific for colorectal cancer提供了一种荟萃分析的框架,它主要基于常用的Wilcoxon rank-sum test和Blocked Wilcoxon rank-sum test 方法计算显著性,再使用分…

STM32自己从零开始实操10:PCB全过程

一、PCB总体分布 分布主要参考有: 方便供电布线。方便布信号线。方便接口。人体工学。 以下只能让大家看到各个模块大致分布在板子的哪一块,只能说每个人画都有自己的理由,我的理由如下。 还有很多没有表达出来的东西,我也不知…

Python和MATLAB网络尺度结构和幂律度大型图生成式模型算法

🎯要点 🎯算法随机图模型数学概率 | 🎯图预期度序列数学定义 | 🎯生成具有任意指数的大型幂律网络,数学计算幂律指数和平均度 | 🎯随机图分析中巨型连接分量数学理论和推论 | 🎯生成式多层网络…

如何解决Windows系统目录权限问题

目录 前言1. 为什么会出现权限问题2. 修改文件权限的步骤2.1 确定目标文件2.2 右键属性设置2.3 更改所有者2.4 修改权限2.5 确认修改 3. 替换文件3.1 拷贝新的文件3.2 验证替换结果 结语 前言 在Windows系统中,时常需要往C盘系统目录下拷贝或者替换文件。然而&…

【Python系列】JSON 序列化性能对比分析

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

【学术会议征稿】第五届计算机工程与智能通信国际研讨会(ISCEIC 2024)

第五届计算机工程与智能通信国际研讨会(ISCEIC 2024) 2024 5th International Symposium on Computer Engineering and Intelligent Communications (ISCEIC 2024) 第五届计算机工程与智能通信国际研讨会(ISCEIC 2024)将于2024年…

安全管理(EHS系统)是什么?化工企业如何进行安全管理?

化工企业一般会涉及到易燃易爆、有毒有害的原材料和产品,生产环境有高温高压、腐蚀性强等危险因素。一旦管理不善或操作失误,极易引发火灾、爆炸、中毒等严重事故,不仅有人身伤害,还会给企业带来巨大损失,甚至影响社会…

如何快速批量修改照片拍摄日期?一键批量搞定拍摄日期修改教程

在摄影爱好者、专业摄影师甚至普通用户中,照片不仅仅是视觉记录,它们还承载着时间和地点的印记。当需要调整大量照片的拍摄日期时,手动操作显然不是最高效的方法。幸运的是,现代文件管理工具如“简鹿文件批量重命名”软件提供了批…

数据隐私保护与区块链技术的结合:新兴趋势分析

在当今数字化时代,数据隐私保护成为了一个备受关注的重要话题。随着个人数据的不断生成和流通,如何有效保护用户的隐私成为了技术创新的一个重要方向。区块链技术作为一种去中心化、安全性高且可追溯的技术手段,正在逐渐成为解决数据隐私保护…

Android --- 广播

广播是什么? 一种相互通信,传递信息的机制,组件内、进程间(App之间) 如何使用广播? 组成部分 发送者-发送广播 与启动其他四大组件一样,广播发送也是使用intent发送。 设置action&#xff…

RoundCube搭建安装教程:服务器配置方法?

RoundCube搭建安装教程的疑问解析!怎么搭建邮件系统? RoundCube是一款开源的Web邮件客户端,具有现代化的用户界面和丰富的功能,可以通过浏览器访问邮件服务器。AokSend将详细介绍如何在服务器上配置和安装RoundCube,以…

JS语法学习

找到官方库,查看相应资料:(都可以切换为中文版本的) 可以在 JavaScript 的官方网站上查看最新的语法规范和文档。JavaScript 的官方网站是 developer.mozilla.orghttps://developer.mozilla.org/en-US/docs/Web/JavaScript。那里…

尚庭公寓开发笔记(一)

本篇文章讲的是p前五十节课 可以关注后续 传统的数据库设计流程 分为三个阶段:概念模型设计阶段 逻辑模型设计阶段 物理模型设计 阶段 为本项目设计数据库模型 地图的存储只需要保存经纬度就ok 本项目采用的是mysql数据库 所有表都使用的是innnodb存储引擎 我们使…