【Python】新手入门:全局变量和局部变量的概念、区别以及用法

【Python】新手入门:全局变量和局部变量的概念、区别以及用法

在这里插入图片描述

🌈 个人主页:高斯小哥
🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程👈 希望得到您的订阅和支持~
💡 创作高质量博文(平均质量分92+),分享更多关于深度学习、PyTorch、Python领域的优质内容!(希望得到您的关注~)


🌵文章目录🌵

  • 💡一、全局变量和局部变量的概念
  • 📚二、全局变量和局部变量的区别
  • 🔧三、全局变量和局部变量的用法
  • 💻四、实例演示和代码示例
  • 📚五、作用域与变量生命周期
  • 🚀六、举一反三:如何修改作用域中的变量
  • 📖七、总结与最佳实践
  • 🔥结语

💡一、全局变量和局部变量的概念

  在Python编程中,理解全局变量和局部变量的概念是编写高效、可维护代码的关键。全局变量和局部变量在作用域、生命周期以及使用方式上都有着显著的区别。

  • 全局变量

    • 定义在函数外部的变量,它在整个程序中都是可见的。
    • 一旦全局变量被定义,它就可以在整个程序中被访问和修改。
    • 全局变量的作用域是整个程序,它的生命周期也是整个程序的执行期间。
    # 这是一个全局变量
    global_var = 10def print_global_var():print(global_var)  # 在函数内部访问全局变量print_global_var()  # 输出:10
    
  • 局部变量

    • 定义在函数内部的变量,它只在函数执行期间存在。
    • 局部变量只在函数内部可见,并且当函数执行完毕后,它的值会被销毁。
    def define_local_var():# 这是一个局部变量local_var = 20print(local_var)  # 在函数内部访问局部变量define_local_var()  # 输出:20
    # print(local_var)  # 这会引发错误,因为local_var是局部变量,在函数外部不可见
    

📚二、全局变量和局部变量的区别


全局变量和局部变量之间的主要区别体现在作用域、生命周期以及使用方式上。

  1. 作用域:全局变量的作用域是整个程序,而局部变量的作用域仅限于定义它的函数内部。在函数内部,局部变量会覆盖同名的全局变量。

    global_var = 30def modify_var():# 这里定义了一个局部变量,与全局变量同名global_var = 40print("Inside function:", global_var)  # 输出:Inside function: 40modify_var()
    print("Outside function:", global_var)  # 输出:Outside function: 30
    

    在上面的例子中,虽然函数内部修改了global_var的值,但这只影响到了局部变量global_var,全局变量global_var的值并未改变。

  2. 生命周期:全局变量的生命周期是整个程序的执行期间,而局部变量的生命周期仅限于函数调用的过程中。当函数执行完毕后,局部变量就会被销毁。

  3. 使用方式:由于全局变量在整个程序中都是可见的,因此过度使用全局变量可能会导致代码难以理解和维护。而局部变量则更加局部化,更易于管理和控制。在编写函数时,应尽量使用局部变量来存储临时数据,以减少对全局状态的依赖。

🔧三、全局变量和局部变量的用法


在Python中,我们可以根据需要灵活地使用全局变量和局部变量。但需要注意的是,在函数内部修改全局变量时,需要使用global关键字来声明。

global_var = 50def modify_global_var():global global_var  # 声明要修改的是全局变量global_var = 60print("Inside function:", global_var)  # 输出:Inside function: 60modify_global_var()
print("Outside function:", global_var)  # 输出:Outside function: 60

在上面的例子中,我们在函数内部使用global关键字声明了global_var是全局变量,并修改了它的值。这样,在函数外部访问global_var时,就能看到修改后的值。

然而,过度依赖全局变量可能会使代码变得难以理解和维护。因此,在编写函数时,应尽量使用局部变量来存储临时数据,并通过返回值来传递结果。这样可以减少函数之间的耦合度,提高代码的可读性和可维护性。

💻四、实例演示和代码示例

下面是一个简单的例子,演示了全局变量和局部变量的使用场景。

# 定义一个全局变量
total_score = 0def add_score(score):# 定义一个局部变量local_score = scoreprint(f"Local score: {local_score}")# 修改全局变量global total_scoretotal_score += local_scoreprint(f"Total score: {total_score}")# 调用函数,传入分数
add_score(85)  # 输出:Local score: 85, Total score: 85
add_score(90)  # 输出:Local score: 90, Total score: 175# 在函数外部访问全局变量
print(f"Final total score: {total_score}")  # 输出:Final totalscore: 175

📚五、作用域与变量生命周期

  理解作用域和变量的生命周期对于编写健壮且高效的代码至关重要。作用域决定了变量的可见性,即变量在哪里可以被访问。而变量的生命周期则关系到变量的创建和销毁的时机。

  全局变量的作用域是整个程序,它们在程序开始执行时创建,并在程序结束时销毁。这意味着全局变量在程序的整个生命周期内都是可用的。然而,这也带来了一个问题:过度使用全局变量可能导致代码难以维护和理解,因为任何函数都可能修改全局变量的值。

  局部变量的作用域则仅限于定义它的函数内部。当函数被调用时,局部变量被创建;当函数执行完毕并返回时,局部变量被销毁。这种局部性使得局部变量更加易于管理和控制,因为它们不会影响到程序的其他部分。

🚀六、举一反三:如何修改作用域中的变量

  在Python中,修改作用域中的变量需要一些特殊的技巧。对于局部变量,我们只需要直接赋值即可。但对于全局变量,我们需要使用global关键字来声明我们想要修改的是全局变量,而不是创建一个新的局部变量。

global_var = 100def modify_global():global global_var  # 声明我们要修改的是全局变量global_var = 200  # 修改全局变量的值modify_global()
print(global_var)  # 输出:200

在嵌套函数中,我们还需要注意变量的作用域链。内层函数可以访问外层函数的局部变量,但不能直接修改它们。如果需要修改外层函数的变量,通常可以通过返回值或者使用nonlocal关键字来实现。

def outer_function():outer_var = 10def inner_function():nonlocal outer_var  # 声明我们要修改的是外层函数的局部变量outer_var = 20inner_function()return outer_varresult = outer_function()
print(result)  # 输出:20

📖七、总结与最佳实践

  全局变量和局部变量是Python编程中的基础概念,理解它们的作用域、生命周期以及使用方式对于编写高质量的代码至关重要。在使用这些变量时,我们需要遵循一些最佳实践:

  1. 尽量避免使用全局变量:全局变量可能导致代码难以理解和维护。在可能的情况下,应尽量使用局部变量和参数传递数据。
  2. 明确变量的作用域:在编写函数时,应明确变量的作用域,避免在函数内部意外地修改全局变量。
  3. 使用globalnonlocal关键字:当需要在函数内部修改全局变量或外层函数的局部变量时,应使用globalnonlocal关键字来明确声明。
  4. 通过返回值传递结果:函数应尽量通过返回值来传递计算结果,而不是依赖于全局变量的修改。

通过遵循这些最佳实践,我们可以编写出更加健壮、易于维护和理解的Python代码。

🔥结语

  全局变量和局部变量是Python编程中不可或缺的概念。通过深入理解它们的作用域、生命周期以及使用方式,我们可以编写出更加高效、可维护的代码。希望本文能够帮助你更好地掌握这两个概念,并在实际编程中灵活运用。如果你有任何疑问或建议,请随时在评论区留言,我们会尽快回复。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Python源码剖析》之字符串拼接的一个效率问题

前言 我们常用的字符串拼接方法有两个,一个是通过“”号实现字符串的拼接,还一个就是通过join方法来实现拼接,前者在写法上更加便利,和数字之间的加法运算一样,通常只有两个运算对象,只不过他们的运算规则…

一篇文章带你了解Python数据分析

目录 一、什么是数据分析? 二、为什么学习数据分析? 三、数据分析实现流程 一、什么是数据分析? 是把隐藏在一些看似杂乱无章的数据背后的信息提炼出来,总结出所研究对象的内在规律。 使得数据的价值最大化 指定促销活动的方…

力扣由浅至深 每日一题.01 两数之和

万物惊鸿,唯我澄明 —— 24.3.9 1. 两数之和https://leetcode.cn/problems/two-sum/ 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会…

安全测试工具Burpsuit和OWASP ZAP使用入门指南

Burpsuit使用入门指南 安装: 网上有很多相关相关保姆级别教程,所以这里不加赘述了尽量使用java8版本,破解版兼容8做的比较好如果发现注册机无法打开或者能打开注册机【run】无法点击唤起软件安装,可以使用命令行工具 java -jar …

大模型概念解析 | In-context Learning

注1:本文系"概念解析"系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:大模型中的In-context Learning 大模型概念解析 | In-context Learning PR-418: What learning algorithm is in-context learning? Investigations with linear mo…

【力扣白嫖日记】1164.指定日期的产品价格

前言 练习sql语句,所有题目来自于力扣(https://leetcode.cn/problemset/database/)的免费数据库练习题。 今日题目: 1164.指定日期的铲平价格 表:Products 列名类型product_idintnew_priceintchange_datedate (pr…

运维打工人,兼职跑外卖的第二个周末

北京,晴,西南风1级。 前序 今天天气还行,赶紧起来,把衣服都洗洗,准备准备,去田老师吃饭早饭了。 一个甜饼、一个茶叶蛋、3元自助粥花费7.5。5个5挺吉利的。 跑外卖的意义 两个字减肥,记录刚入…

python使用multiprocessing

multiprocessing multiprocessing是Python标准库中的一个模块,用于实现多进程编程。它提供了一种简单而高效的方式来利用多核处理器的能力,通过在多个进程中同时执行任务,加快程序的执行速度和提高系统的吞吐量。 下面是使用multiprocessin…

python 蓝桥杯之动态规划入门

文章目录 DFS滑行(DFS 记忆搜索) 思路: 要思考回溯怎么写(入参与返回值、递归到哪里,递归的边界和入口) DFS 滑行(DFS 记忆搜索) 代码分析: 学会将输入的数据用二维列表…

Java编程实战:构建校园二手物品交易系统

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

CSRF攻击解析:原理、防御与应对策略

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

ERC20学习

ERC20简介 ERC20是一种代币标准,用于创建可替代的代币。 ERC20是在以太坊网络上实现的代币标准,它为数字资产或代币定义了一套规则和接口。这些符合ERC20标准的代币在性质上是完全相同的。即每一个代币都可以被另一个同类型的代币替代,这种属…