Python作用域大揭秘:局部、全局,global关键字

news2024/12/24 2:28:21

更多资料获取

📚 个人网站:ipengtao.com


Python作用域是编程中关键的概念之一,决定了变量在代码中的可见性和生命周期。本文将深入探讨Python的局部作用域、全局作用域,以及如何使用global关键字来操作全局变量。通过丰富的示例代码,我们将全面理解Python作用域的各个方面。

局部作用域

在函数内部声明的变量属于局部作用域,仅在函数体内部可见。

示例代码如下:

def local_scope_example():
    local_variable = "I am local"
    print(local_variable)

# 调用函数
local_scope_example()

# 尝试在函数外访问局部变量(会报错)
# print(local_variable)

通过这个例子,看到在函数外部无法访问局部变量,这展示了局部作用域的封闭性。

全局作用域

全局作用域中声明的变量可以在整个代码文件中访问,包括函数内部。

示例代码如下:

global_variable = "I am global"

def global_scope_example():
    print(global_variable)

# 调用函数
global_scope_example()

# 在函数内访问全局变量
def modify_global_variable():
    global global_variable
    global_variable = "Modified global"
    print(global_variable)

# 调用修改函数
modify_global_variable()

# 在函数外查看修改后的全局变量
print(global_variable)

这个例子展示了全局变量的可见性和如何在函数内修改全局变量。

使用 global 关键字

当需要在函数内部修改全局变量时,需要使用global关键字,以明确指示要操作的是全局变量。

示例代码如下:

global_variable = "I am global"

def modify_global_variable():
    global global_variable
    global_variable = "Modified global"
    print(global_variable)

# 调用修改函数
modify_global_variable()

# 在函数外查看修改后的全局变量
print(global_variable)

通过这个例子,了解使用global关键字来在函数内修改全局变量。

闭包中的作用域

闭包是函数和其引用环境的组合。在闭包中,可以访问包含函数外部的变量。

示例代码如下:

def outer_function(x):
    def inner_function(y):
        return x + y
    return inner_function

closure_example = outer_function(10)

# 调用闭包
result = closure_example(5)
print(result)

这个例子演示了闭包中如何访问外部函数的变量。

非局部作用域

nonlocal关键字允许在嵌套函数中修改封闭作用域的变量。

示例代码如下:

def outer_function():
    outer_variable = "I am outer"
    
    def inner_function():
        nonlocal outer_variable
        outer_variable = "Modified outer"
    
    inner_function()
    print(outer_variable)

# 调用外部函数
outer_function()

这个例子展示了如何使用nonlocal关键字在内部函数中修改外部函数的变量。

动态作用域

Python支持动态作用域的概念,通过locals()globals()函数可以动态获取局部和全局作用域的变量。

示例代码如下:

global_variable = "I am global"

def dynamic_scope_example():
    local_variable = "I am local"
    dynamic_variable = "I am dynamic"

    print("Local variables:", locals())
    print("Global variables:", globals())

# 调用函数
dynamic_scope_example()

这个例子展示了如何使用locals()globals()动态获取局部和全局作用域的变量,为动态作用域的理解提供了示例。

作用域与性能

在大型项目中,良好的作用域设计可以提高代码的可维护性和性能。通过将变量限制在最小的作用域范围内,可以减少命名冲突,提高代码的可读性和可理解性。

示例代码如下:

def performance_optimization_example():
    for i in range(1000000):
        local_variable = i * 2
        # do some computation using local_variable

# 调用函数
performance_optimization_example()

这个例子强调了在循环中使用局部变量,以提高性能和减少内存占用。

总结

在本文中,深入研究了Python作用域的各个方面,包括局部作用域、全局作用域、闭包、动态作用域以及使用globalnonlocal关键字的技巧。通过丰富的示例代码,我们理解了作用域对于变量的可见性和生命周期的重要性。

局部作用域在函数内部创建,使变量在函数外不可见,确保了代码的封闭性。全局作用域中的变量可在整个代码文件中访问,同时学到了如何使用global关键字来在函数内部修改全局变量。闭包是函数和其引用环境的组合,展示了在函数外部访问变量的灵活性。

在动态作用域方面,通过locals()globals()函数动态获取局部和全局作用域的变量,为动态作用域的理解提供了示例。最后,强调了通过精心设计作用域可以提高代码性能和可维护性的重要性,以及如何在大型项目中充分利用局部变量的技巧。

总体而言,本文通过深入而全面的探讨,对Python作用域有了更为深刻的理解。在实际编程中,良好的作用域设计不仅有助于代码的清晰性和可读性,还为提高性能、减少内存占用提供了有效手段。


Python学习路线

在这里插入图片描述

更多资料获取

📚 个人网站:ipengtao.com

如果还想要领取更多更丰富的资料,可以点击文章下方名片,回复【优质资料】,即可获取 全方位学习资料包。

在这里插入图片描述
点击文章下方链接卡片,回复【优质资料】,可直接领取资料大礼包。

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

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

相关文章

Jmeter测试地图服务性能

一、前言 Jmeter可以用来模拟多用户来访问http(s)请求,并返回访问结果,而地图服务归根结底仍是个http(s)请求。所以我们可以使用Jmeter对地图服务进行压力测试。 当然地图服务也有着它的特殊性&#xff0…

AES加密技术:原理与应用

一、引言 随着信息技术的飞速发展,数据安全已成为越来越受到重视的领域。加密技术作为保障数据安全的重要手段,在信息安全领域发挥着举足轻重的作用。AES(Advanced Encryption Standard)作为一种对称加密算法,自1990年…

算法题--排椅子(贪心)

题目链接 code #include<bits/stdc.h> using namespace std;struct node{int indx;//用来存储数组下标int cnt;//用来计数 };bool cmp(node a,node b){ //判断是否是数字最大的一个就是经过最多谈话人的道return a.cnt>b.cnt; } node row[2010],cow[2010];bool cmp…

C++12.1

三种运算符重载&#xff0c;每个至少实现一个运算符的重载 #include <iostream>using namespace std;class Person {friend const Person operator- (const Person &L, const Person &R);friend bool operator<(const Person &L,const Person &R);f…

TZOJ 1420 手机短号

答案&#xff1a; #include <stdio.h> #include <string.h> int main() {int n 0;scanf("%d", &n);while (n--) //输入n次{char phone[12];scanf("%s", phone);printf("6%s\n", phone 6); //跳过数组前6个元素&#…

数据挖掘实战:基于 Python 的个人信贷违约预测

本次分享我们 Python 觅圈的一个练手实战项目&#xff1a;个人信贷违约预测&#xff0c;此项目对于想要学习信贷风控模型的同学非常有帮助。 技术交流 技术要学会交流、分享&#xff0c;不建议闭门造车。一个人可以走的很快、一堆人可以走的更远。 好的文章离不开粉丝的分享、…

win10 修改任务栏颜色 “开始菜单、任务栏和操作中心” 是灰色无法点击,一共就两步,彻底解决有图有真相。

电脑恢复了一下出厂设置、然后任务栏修改要修改一下颜色&#xff0c;之前会后来忘记了&#xff0c;擦。 查了半天文档没用&#xff0c;最后找到官网才算是看到问题解决办法。 问题现象: 解决办法: 往上滑、找到这里 浅色改成深色、然后就可以了&#xff0c;就这么简单。 w…

美丽的时钟

案例绘制一个时钟 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>美丽的时钟</title><script language"javascript">window.onloadfunction(){var clockdocument.getElementById("clock"…

Ubuntu中MySQL安装与使用

一、安装教程&#xff1a;移步 二、通过sql文件创建表格&#xff1a; 首先进入mysql&#xff1a; mysql -u 用户 -p 回车 然后输入密码source sql文件&#xff08;路径&#xff09;;上面是sql语句哈&#xff0c;所以记得加分号。 sql文件部分截图&#xff1a; 创建成功后的部…

【小布_ORACLE笔记】Part11-1--RMAN Backups

Oracle的数据备份于恢复RMAN Backups 学习第11章需要掌握&#xff1a; 一.RMAN的备份类型 二.使用backup命令创建备份集 三.创建备份文件 四.备份归档日志文件 五.使用RMAN的copy命令创建镜像拷贝 文章目录 Oracle的数据备份于恢复RMAN Backups1.RMAN Backup Concepts&#x…

【无标题】mmocr在云服务器上

这里写目录标题 1、创建虚拟环境2、切换和退出conda虚拟环境3. 显示、复制&#xff08;克隆&#xff09;、删除虚拟环境4、删除环境安装指示中 cd进项目文件夹开始训练模型&#xff08;python XXX.py | tee record.txt 记录训练结果&#xff09;如何在Linux服务器上安装Anacond…

Redis部署-主从模式

目录 单点问题 主从模式 解析主从模式 配置redis主从模式 info replication命令查看复制相关的状态 断开复制关系 安全性 只读 传输延迟 拓扑结构 数据同步psync replicationid offset psync运行流程 全量复制流程 无硬盘模式 部分复制流程 积压缓冲区 实时复…

【代码】基于算术优化算法(AOA)优化参数的随机森林(RF)六分类机器学习预测算法/matlab代码

代码名称&#xff1a;基于算术优化算法&#xff08;AOA&#xff09;优化参数的随机森林&#xff08;RF&#xff09;六分类机器学习预测算法/matlab代码 使用算术优化算法&#xff08;AOA&#xff09;优化分类预测模型的参数&#xff0c;收敛性好&#xff0c;准确率提升明显&am…

【Java】I/O流—File类:从0到1的全面解析

&#x1f38a;专栏【Java】 &#x1f33a;每日一句:看不清楚未来时,就比别人坚持久一点 ⭐欢迎并且感谢大家指出我的问题 目录 1.File概述 2.File构造方法 (1).根据文件路径创建文件对象 (2).根据父路径名字符串和子路径名字符串创建对象 (3).根据父路径对应文件对象和子路…

Linux学习第46天:Linux音频驱动试验:总有那么一首歌,会让你泪流满面。

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 大叔来之一个小村庄&#xff0c;上大学以后来到了省城济南。之前高中练习英语听力买过一个随声听&#xff0c;晚上练习听力&#xff0c;怕影响同学休息还买了一个…

超级鹰验证码平台使用 + 案例使用

超级鹰主要是用来识别图片形式的验证码&#xff0c;进行登录验证的。 使用流程&#xff1a; 注册账号领取1000题分&#xff0c;新用户可以享受1000题分的优惠。 进去页面之后&#xff0c;点击开发文档&#xff1a; 这里面有很多语言的使用&#xff0c;这篇博客介绍python的…

Linux中top命令输出日志分析?

以下是对输出的各部分的解释&#xff1a; 09:54:34&#xff1a;系统当前时间。up 161 days, 2:08&#xff1a;系统已经运行了161天2小时8分钟。5 users&#xff1a;有5个用户登录系统。load average: 0.13, 0.08, 0.05&#xff1a;系统的1分钟、5分钟、15分钟的平均负载。负载…

Halcon算子中的slant倾斜hom_mat2d_slant

1.hom_mat2d_slant(HomMat2DIdentity, rad(50), y, 0, 0, HomMat2DSlant) --这个是选择20度和50度的。&#xff08;0&#xff0c; 0&#xff09;点对应的是左上角&#xff0c;50度就是让y轴产生有50度的倾角。 2.hom_mat2d_slant(HomMat2DIdentity, rad(60), x, 0, 0, HomMat2D…

【GraphQL】PostGraphile简介

Introduction to PostGraphile 什么是PostGraphile&#xff1f; 如果您熟悉Spring Data JPA&#xff0c;那么理解PostGraphile将非常容易。但没关系。让我们来看看。PostgreSQL数据库是一个非常流行的高性能应用数据库。ProstGraphile与PostgreSQL数据库和GraphQL配合使用。 …

Springbot启动报错-类文件具有错误的版本 61.0, 应为 52.0

错误再现&#xff1a; 启动Springboot项目时候报错 java: 无法访问org.springframework.boot.SpringApplication 错误的类文件: /D:/Maven/apache-maven-3.6.3/repository/org/springframework/boot/spring-boot/3.0.0/spring-boot-3.0.0.jar!/org/springframework/boot/Sprin…