python定义全局变量|(python定义全局变量global)

python定义全局变量|(python定义全局变量global)




前面我们已经学会了自定义函数 、函数参数、返回值,很多同学写代码时遇到过这种诡异问题:函数外面定义的变量 ,在函数里面修改后,外面的值没变;嵌套函数中想修改外层函数变量直接报错 。

其实所有问题的核心,都是变量作用域没搞明白!这是Python基础的核心重难点 ,也是面试高频考点。今天我们从零吃透作用域,手把手学会 global 和 nonlocal 两个关键关键字,彻底解决变量修改混乱问题。

一、什么是变量作用域?

简单来说:变量的生效范围 。

我们定义的每一个变量 ,都不是全局通用的,它有专属的“生效区域”,出了这个区域 ,变量就会失效 、无法调用。Python中一共分为四大作用域 ,优先级从低到高(查找顺序从近到远):

1. L(Local)局部作用域:函数内部定义的变量,仅当前函数生效

2. E(Enclosing)嵌套作用域:嵌套函数中,外层函数的变量(仅嵌套场景生效)

3. G(Global)全局作用域:函数外部、脚本顶层定义的变量 ,整份代码生效

4. B(Built-in)内置作用域:Python自带的内置函数/变量(如print、len)

核心查找规则

就近原则:代码调用变量时,优先在当前局部找 → 找不到找外层嵌套 → 再找全局 → 最后找系统内置。

二 、全局作用域 vs 局部作用域(基础核心)

这是最常用的两种作用域,90%的基础代码问题都出自这里 。

1. 全局变量

定义在所有函数外部、脚本最外层的变量 ,整个文件的所有函数都可以读取。

示例代码:

python

# 全局变量(全局作用域)

name = "学生"


def show_name():

# 函数内部可以直接读取全局变量

print("函数内部读取:", name)


# 调用函数

show_name()

# 外部直接读取全局变量

print("函数外部读取:", name)


运行结果:

plaintext

函数内部读取: 学生

函数外部读取: 学生


2. 局部变量

定义在函数内部的变量,仅当前函数可用,函数执行结束后 ,局部变量会自动销毁。

示例代码:

python

def show_msg():

# 局部变量(仅当前函数生效)

msg = "欢迎学习Python"

print("局部变量:", msg)


show_msg()

# 报错!外部无法调用函数内部的局部变量

print(msg)


运行报错: NameError: name 'msg' is not defined

✅ 总结:局部变量只属于自己函数,外部完全无法访问 。

三、新手高频坑:函数内修改全局变量

很多新手会犯一个错:函数内想修改全局变量,结果修改无效 ,甚至报错 。

错误示例(重点避坑)

python

# 全局变量

num = 100


def change_num():

# 试图修改全局变量

num = 200

print("函数内num:", num)


change_num()

# 全局变量没有被修改!

print("全局num:", num)


运行结果:

plaintext

函数内num: 200

全局num: 100


原理详解

Python的规则:函数内部直接赋值变量时,会默认创建一个新的局部变量,不会修改全局变量。

上面代码中 ,函数内的 num=200 是新的局部变量 ,和外部全局变量 num 是两个完全无关的变量。

如果想要在函数内部修改全局变量,就必须用到今天的核心关键字: global

四 、global关键字:修改全局变量

作用

声明当前函数内的变量是全局变量,不再创建局部变量 ,直接对全局变量进行修改 。

正确用法示例

python

# 全局变量

num = 100


def change_num():

# 声明num为全局变量

global num

# 直接修改全局变量

num = 200

print("函数内修改后:", num)


change_num()

# 全局变量同步修改成功

print("全局最终值:", num)


运行结果:

plaintext

函数内修改后: 200

全局最终值: 200


global使用注意事项

1. global 声明必须写在函数内部变量使用之前

2. 可以一次性声明多个全局变量: global a, b, c

3. 仅用于修改全局变量,只读全局变量无需声明

五 、嵌套作用域 & nonlocal关键字

学会了全局、局部,我们进阶学习嵌套函数的变量规则 ,也是面试必考重点。

什么是嵌套函数

函数里面再定义函数,外层函数、内层函数形成嵌套结构。

- 外层函数变量:属于嵌套作用域(E)

- 内层函数变量:属于局部作用域(L)

新手坑:内层函数修改外层函数变量

python

def outer():

# 外层函数变量(嵌套作用域)

age = 18

def inner():

# 试图修改外层变量,报错

age = 20

print("内层age:", age)

inner()

print("外层age:", age)


outer()


和全局变量问题一致:内层直接赋值 ,会创建内层局部变量,外层变量不变 。

nonlocal关键字用法

专门用于嵌套函数,修改外层函数的变量(非全局变量)

正确示例:

python

def outer():

age = 18

def inner():

# 声明age为外层函数变量

nonlocal age

age = 20

print("内层修改后age:", age)

inner()

# 外层变量同步修改

print("外层最终age:", age)


outer()


运行结果:

plaintext

内层修改后age: 20

外层最终age: 20


六 、global 和 nonlocal 核心区别(一秒分清)

关键字 作用场景 修改对象

global 普通函数 全局变量

nonlocal 嵌套函数 外层函数变量(非全局)

终极口诀

改全局 ,用global;改外层,用nonlocal;只读不用声明,赋值必看作用域!

七、综合实战案例(巩固所有知识点)

写一段代码 ,融合全局变量、global 、嵌套函数、nonlocal:

python

# 全局变量

count = 0


def outer():

# 嵌套作用域变量

num = 10

def inner():

# 修改外层函数变量

nonlocal num

num += 5

# 修改全局变量

global count

count += 1

print("内层num:", num)

print("全局count:", count)

inner()

print("外层num:", num)


# 执行代码

outer()

print("最终全局count:", count)


运行结果:

plaintext

内层num: 15

全局count: 1

外层num: 15

最终全局count: 1


八、本节课重点总结

1. 变量四大作用域:局部→嵌套→全局→内置 ,遵循就近查找原则

2. 普通函数内修改全局变量,必须用 global 声明

3. 嵌套内层函数修改外层函数变量,必须用 nonlocal 声明

4. 只读变量无需声明 ,赋值修改变量必须区分作用域

5. 局部变量函数结束即销毁,全局变量全程生效

这节课解决了Python函数变量最核心的混乱问题,彻底掌握作用域后 ,你写函数代码将再也不会出现变量值异常 、莫名报错的问题!

本文来自作者[向梦]投稿,不代表点新号立场,如若转载,请注明出处:https://sc-hx.cn/yule/202609-14479.html

(11)

文章推荐

  • 行业并表监管落地,龙头券商集体异动!华宝基金券商ETF(512000)涨超2%!

      3月17日早盘,券商异动走强,截至发稿,证券公司指数囊括的49只券商股全线飘红,国信证券涨超7%,广发证券涨超4%,东方财富、华泰证券等涨超3%。370亿顶流券商ETF(512000)迅速冲高,场内价格现涨超2%。  消息面上,中国证券业协会近日在业内下发通知,正式启动首批过渡期证券公司并表

    2026年03月17日
    122310
  • 马克龙与夫人年龄差多少(马克龙与夫人差多少岁)

    本文目录一览:1、法国总统马克龙老婆背景2、法国第一夫人:比丈夫大24岁,气质优雅不做作,穿衣不像70岁的人3、法国总统马克龙老婆大马克龙多少,法国总统马克龙及其夫人法国总统马克龙老婆背景法国总统马克龙的妻子布丽吉特的家庭背景如下:家族企业背景:布丽吉特来自法国北部亚眠的一个殷实

    2026年03月20日
    90316
  • 5分钟读懂:新质生产力与传统生产力的本质区别(生产力新兴技术有哪些)

    坚持!不是口号,而是行动……新质生产力概念横空出世1、新质生产力是推动高质量发展的核心动力,其本质是技术革命性突破与生产要素创新性配置的融合,需通过持续行动推动落地而非停留于口号。新质生产力的定义与内涵新质生产力是相对于传统生产力提出的全新概念,其核心特征是技术革命性突破与生产要素创新性配置的深度

    2026年07月21日
    20318
  • 疫情高风险国家(高风险国家地区名单查询)

    海外资讯:柬埔寨被泰国列为疫情高风险国家!东盟已全部沦陷.泰国于4月22日将柬埔寨列为疫情高风险国家,同时东盟十国已全部出现新冠确诊病例。银行业中的高风险国家一般是指的朝鲜、伊朗、古巴等被制裁了几个国家,这几个国家的企业和个人开户、进行金融交易都非常麻烦。停火可能性分析截至12月16日,双方均未宣

    2026年08月05日
    29323
  • 中东呼吸综合征诊疗方案(中东呼吸综合症2015)

    中东呼吸综合征治疗方法有哪些中东呼吸综合征(MERS)的治疗以支持性疗法和试验性抗病毒药物为主,目前尚无特效疫苗或根治手段,治疗核心是缓解症状、控制并发症并降低死亡率。疾病概述定义:中东呼吸综合征(MERS)是由MERS-CoV引起的病毒性呼吸道疾病,属于冠状病毒家族(该家族还包括引起普通感冒和

    2026年08月14日
    23311
  • 芈姓文化研究成果(芈姓起源探究)

    芈姓是什么族芈姓是中国古老姓氏,起源于华夏族,为楚国贵族祖姓,并非单一现代民族专属。姓氏起源与族属华夏族根源:据《史记·楚世家》《国语·郑语》等典籍记载,芈姓源于上古黄帝后裔,属祝融八姓之一,得姓始祖为季连。芈姓是源于轩辕氏的华夏族群,具体为上古黄帝第八世孙季连的后裔,属于以图腾崇拜为姓的楚人祖

    2026年08月30日
    13313
  • 白萝卜羊肉汤的禁忌(白萝卜羊肉汤的禁忌和副作用)

    白萝卜羊肉汤的禁忌(白萝卜羊肉汤的禁忌和副作用)萝卜炖羊肉能不能放姜?我拿自己和家里人试了一个冬天,说点实在的。先说结论:能放,而且放了更好。网上说萝卜姜相克,我当初也犯过嘀咕,但问过学中医的表姐,又拿自家一整个冬天的炖汤实践验证过——结论就是,那点凉温早就中和了,压根没冲突。表姐从性味上给我拆了

    2026年09月03日
    11319
  • 古今异义词(古今异义词什么意思)

    古今异义词(古今异义词什么意思)常见古今异义词积累52例1.走[今义]走路,行走。[古义]跑。[例]扁鹊望桓侯而还走。(《扁鹊见蔡桓公》)2.汤[今义]食物加水煮熟后的液汁。[古义]热水。[例]及其日中如探汤。(《两小儿辩日》)3.去[今义]往,从所在地到别的地方。[古义]距

    2026年09月03日
    9319
  • 身弱是什么意思|(财旺身弱是什么意思)

    身弱是什么意思|(财旺身弱是什么意思)大家好我是好好就好,每天给大家带来最新动态,内容随缘更,每篇都掏干货;如果你觉得这些信息对生活有用,就点个关注~生活里有一类人,天生感知力很强。别人随口一句闲话,自己心里要琢磨很久;环境嘈杂、人多拥挤的时候,很容易心慌疲惫;明明没有干重活,一天下来也觉得身心

    2026年09月04日
    12301
  • 哎组词语|(哎组词语词语)

    哎组词语|(哎组词语词语)哈喽大家好,欢迎来到秒懂词语,每天积累一个好词好句。今天学习协警形容词。读音是哎,叠词读法有固定使用范围,专门用来形容霜雪色泽洁白,单独使用比较少。最经典搭配就是成语:白雪皑皑,用来描绘群山大地被大雪覆盖一片纯白辽阔的画面。例句:冬日远山白雪皑皑,风景格外壮美。词汇积累:

    2026年09月04日
    11314
  • 湖南烟花爆炸28人死亡事件(湖南燃放烟花爆竹)

    本文目录一览:1、2023年重大事故合集汇总盘点2、湖南花炮厂爆炸蘑菇云升起!静电引爆的生死警示3、最新!湖南一工厂发生爆炸已致9伤2失联4、湖南浏阳烟花厂爆炸致死7死多伤,这次爆炸的主要原因是什么?5、湖南烟花厂爆炸已致9人遇难、26人受伤2023年重大事故合集汇总盘

    2026年04月03日
    107320
  • 西安拆迁|(西安拆迁最新消息)

    西安拆迁|(西安拆迁最新消息)客观来讲,近期凤城二路中粮可口可乐陕西厂老厂区正式启动拆除的消息引发了大家非常高的关注!要知道拆除的老厂区占地约75亩,而且根据规划土地将调整为容积率2.8的住宅用地!从表面来看,三十年的“工业老厂区”调整为住宅用地,无疑是为经开核心区增添了土地存量,但更深层次的意义

    2026年09月04日
    11301

发表回复

本站作者才能评论

评论列表(3条)

  • 向梦的头像
    向梦 2026年09月04日

    我是点新号的签约作者“向梦”

  • 向梦
    向梦 2026年09月04日

    本文概览:python定义全局变量|(python定义全局变量global)前面我们已经学会了自定义函数、函数参数、返回值,很多同学写代码时遇到过这种诡异问题:函数外面定义的变量,在函数...

  • 向梦
    用户090401 2026年09月04日

    文章不错《python定义全局变量|(python定义全局变量global)》内容很有帮助