全局变量在 Python 中的应用场景

在Python中,全局变量是在程序的全局范围内定义的变量,可以在整个程序中访问。虽然在Python中使用全局变量并不像在其他编程语言中那样被推荐,因为它可能导致代码不易理解和维护,但在一些特定的情况下,全局变量仍然是有用的。

在这里插入图片描述

1、问题背景

在 Python 中使用 Tkinter 库创建 GUI 时,有时会遇到 “button1 is not defined” 的错误。这可能是由于在函数中使用了在其他函数中定义的变量。例如,在下面的代码中,button1 在 next_screen 函数中定义,但在 hypoténusegetdef 函数中使用:

import sys
from tkinter import *


#first new screen
def hypoténusegetdef ():
    widgets1 = button1
    nextscreen1(widgets1)

def next_screen1(names):
    for widget in names:
        widget.place_forget()
        hyplabel1 = Label (text = "This is my text")



def next_screen(names):
    for widget in names:
        widget.place_forget()
        button1 = Button (text = "Button1",fg = "blue",command = hypoténusegetdef)
        button1.grid (row = 1,column = 2)


def forget_page1():
    widgets = [mLabel1, button]
    next_screen(widgets)

################################################################################

#first page things
mGui = Tk ()

mGui.geometry("600x600+545+170")
mGui.title("MyMathDictionary")
mLabel1 = Label (text = "Welcome to MyMathDictionary. Press Next to continue.",
                 fg = "blue",bg = "white")
mLabel1.place (x= 150,y = 200)

button = Button (text = "Next", command = forget_page1 )
button.place(x = 275,y = 230)

mGui.mainloop()

当用户点击 “Next” 按钮时,forget_page1 函数将调用 next_screen 函数,后者将销毁 mLabel1 和 button 小部件,并创建 button1 小部件。当用户点击 button1 按钮时,hypoténusegetdef 函数将被调用,但该函数试图使用 button1 变量,而该变量在该函数中未定义。

2、解决方案

一种解决方法是将 button1 变量声明为全局变量。这可以通过在函数外声明该变量来实现,如下所示:

import sys
from tkinter import *

#first new screen
button1 = None

def hypoténusegetdef ():
    widgets1 = button1
    nextscreen1(widgets1)

def next_screen1(names):
    for widget in names:
        widget.place_forget()
        hyplabel1 = Label (text = "This is my text")



def next_screen(names):
    for widget in names:
        widget.place_forget()
        button1 = Button (text = "Button1",fg = "blue",command = hypoténusegetdef)
        button1.grid (row = 1,column = 2)


def forget_page1():
    widgets = [mLabel1, button]
    next_screen(widgets)

################################################################################

#first page things
mGui = Tk ()

mGui.geometry("600x600+545+170")
mGui.title("MyMathDictionary")
mLabel1 = Label (text = "Welcome to MyMathDictionary. Press Next to continue.",
                 fg = "blue",bg = "white")
mLabel1.place (x= 150,y = 200)

button = Button (text = "Next", command = forget_page1 )
button.place(x = 275,y = 230)

mGui.mainloop()

现在,当用户点击 “Next” 按钮时,forget_page1 函数将调用 next_screen 函数,后者将销毁 mLabel1 和 button 小部件,并创建 button1 小部件。当用户点击 button1 按钮时,hypoténusegetdef 函数将被调用,该函数现在可以访问 button1 变量,因为它是全局变量。

全局变量在 Python 中的应用场景有很多,例如,可以用来在函数之间共享数据。然而,使用全局变量也存在一些弊端,例如,容易导致代码难以维护和调试。因此,在使用全局变量时,需要权衡利弊。

总的来说全局变量在某些情况下很方便,但过度使用全局变量可能会导致代码的可维护性下降。主要是因为,在编写Python代码时,应尽量减少对全局变量的使用,而是更多地采用函数参数和返回值来传递数据。

如果有任何问题都可以这里留言讨论。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

企业微信hook接口协议,ipad协议http,设置是否自动同意

设置是否自动同意 参数名必选类型说明uuid是String每个实例的唯一标识,根据uuid操作具体企业微信 请求示例 {"uuid":"bc4800492083fdec4c1a7e5c94","state":1 //1 是需要验证同意(需要手动点击同意) 0关闭验证…

gtest的编译与使用

文章目录 gtest的编译与使用概述笔记CMake参数官方文档测试程序测试效果END gtest的编译与使用 概述 gTest是 googletest的缩写,如果直接找gTest项目,是找不到的。 库地址 https://github.com/google/googletest.git 迁出到本地后,切到最新…

中电金信:看 “咨询+技术”如何引领数字化变革新风向

当前,新一轮创新技术和产业变革正在重塑全球的经济格局。日本政府及社会各界也从各个领域着手推进数字化。2021年,日本政府成立了“数字厅”,通过一系列举措推动数字化升级,希望将日本加速转型为数字经济的区域领导者,…

继续SQL

主知识点六:having 聚合前的筛选用where,聚合后的筛选用having Having和where的区别是:运行顺序和对象不用 Having是在group by聚合后的基础上进行筛选。 ● 【例题27*】(运行原理)查询总人口数至少为3亿的大洲和…

git的标签管理

理解标签 在Git中,标签tag用于标记特定的一个重要点,比如版本发布。标签允许捕捉某一次提交的状态,当我们需要退回到某次提叫的版本时,通过标签我们快速定位到。标签具有两种类型: 轻量标签:最简单的标签形式&#x…

QGIS编译

一,安装:OSGeo4W 二,安装:Cygwin64 https://www.cygwin.com/setup-x86_64.exe 三,安装: 安装bison和flex 四)QGIS_3.28 下载QGIS_3.28的源码包 五 环境变量设置: echo off set VS19…

那些可免费使用的在线大语言模型服务

2022年底以ChatGPT[1]为代表的大语言模型的出现掀起了人工智能应用的新浪潮。这些庞大的语言模型经过对海量文本数据的训练,能够理解和生成逼近人类水平的自然语言,在对话、问答、文本生成、代码编写等领域展现出了惊人的能力。 最初这种能力“垄断”在O…

用手势掌控PPT,玩转演示新姿势

推荐运行环境 使用anaconda创建环境,以免污染原来的python开发环境conda install python3.9pip install -q mediapipe0.10.0pip install pyautoguiPython: version 3.8 - 3.11PIP: version 20.3 请注意以下的坑 以下为我测试过程中的大坑,请及时避开&am…

【2024高校网络安全管理运维赛】巨细记录!

2024高校网络安全管理运维赛 文章目录 2024高校网络安全管理运维赛MISC签到考点:动态图片分帧提取 easyshell考点:流量分析 冰蝎3.0 Webphpsql考点:sql万能钥匙 fileit考点:xml注入 外带 Cryptosecretbit考点:代码阅读…

Driftingblues靶机系列Driftingblues5

获取靶机的ip:192.168.108.37 扫描靶机的端口服务: 看到web服务和ssh服务: 先查看一下web服务: 扫描到web服务的信息: 访问web服务: 在源代码中并没有看到有什么新的信息,扫描一下靶机目录:…

vue地址选择器-三级联选择器+详细地址

在页面的显示情况 前端拼接实现存储 具体实现步骤 1.安装中国全省市区的数据 在命令提示符窗口使用管理员身份进入对应vue项目的文件夹,在窗口安装 npm install element-china-area-data -S2.在script内引入安装的数据 import {regionData,codeToText } from…

从Flutter范儿的单例来看Dart的构造函数

点击上方蓝字关注我,知识会给你力量 单例模式 单例模式应该是设计模式中使用的最广泛的一种设计模式了,在Kotlin中,甚至为它单独创建了一个语法糖——object类,来快速实现单例模式,而在Dart中,并没有像Kotl…

某盾BLACKBOX逆向关键点

需要准备的东西: 1、原JS码 2、AST解混淆码 3、token(来源于JSON) 一、原JS码很好获取,每次页面刷新,混淆的代码都会变,这是正常,以下为部分代码 while (Qooo0) {switch (Qooo0) {case 110 14 - 55: {function O0…

Win10/11共享文件夹,访问提示需要输入用户名密码

Win10/11共享文件夹,访问提示需要输入用户名密码 问题 已经关闭了密码保护共享,但是局域网其他电脑访问该文件夹,提示需要输入用户名和密码 解决方法 操作步骤 1.按WINR键打开运行,输入gpedit.msc打开本地组策略编辑器 2.按如…

五种算法(BWO、RUN、SO、HO、GWO)求解复杂城市地形下无人机路径规划,可以修改障碍物及起始点(MATLAB)

一、算法介绍 (1)白鲸优化算法BWO 参考文献:Zhong C, Li G, Meng Z. Beluga whale optimization: A novel nature-inspired metaheuristic algorithm[J]. Knowledge-Based Systems, 2022, 109215. (2)龙格-库塔优化…

【Android学习】简单的登录页面和业务逻辑实现

实现功能 1 登录页&#xff1a;密码登录和验证码登录 2 忘记密码页&#xff1a;修改密码 3 页面基础逻辑 java代码 基础页面 XML login_main.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.and…

Agent AI:智能代理的未来

&#x1f388;写在前面 &#x1f64b;‍♂️大家好呀&#xff0c;我是超梦梦梦梦 &#x1f64b;‍♂️ 小伙伴们如果在学习过程中有不明白的地方&#xff0c;欢迎评论区留言提问&#xff0c;小梦定知无不言&#xff0c;言无不尽。 目录 一、Agent AI的起源与发展 二、Agent A…

js,JavaScript 对象(2024-05-02)

对象是 JavaScript 的数据类型之一。 对象用于存储键/值&#xff08;名称/值&#xff09;集合。 JavaScript 对象是命名值的集合。 下例创建具有四个键/值属性的 JavaScript 对象&#xff1a; const person {firstName: "Bill",lastName: "Gates",age:…

Linux中的简单操作 ls/tar/pwd/cd/mkdir/touch 等

目录 前言 安装和卸载软件包 ls 查看指定路径下的文件和文件夹 tar 解压缩/压缩命令 pwd 查看当前路径 cd 改变目录 mkdir 创建目录 递归创建 rm rmdir 删除文件或目录 touch 创建文件 ll、echo、重定向符&#xff08;>,>>&#xff09; ll echo 重定向符…

嵌入式C语言高级教程:实现基于STM32的无线远程监控系统

无线远程监控系统可以广泛应用于安防、环境监测等领域&#xff0c;提供实时数据传输和警报功能。本教程将指导您如何在STM32微控制器上实现一个基本的无线远程监控系统。 一、开发环境准备 硬件要求 微控制器&#xff1a;STM32L476RG&#xff0c;特别适合低功耗应用。开发板…