惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Check Point Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 聂微东
月光博客
月光博客
博客园 - 司徒正美
爱范儿
爱范儿
aimingoo的专栏
aimingoo的专栏
量子位
Recent Announcements
Recent Announcements
V
V2EX
P
Proofpoint News Feed
小众软件
小众软件
云风的 BLOG
云风的 BLOG
腾讯CDC
宝玉的分享
宝玉的分享
Microsoft Azure Blog
Microsoft Azure Blog
大猫的无限游戏
大猫的无限游戏
Vercel News
Vercel News
The GitHub Blog
The GitHub Blog
A
About on SuperTechFans
B
Blog
博客园_首页
GbyAI
GbyAI
博客园 - Franky

博客园 - emanlee

python match case , 给出简单示例,并给出解释 Django3 核心入门知识点 HTML + CSS + JS 入门核心知识点 vs code 使用python,必须安装python解释器 Ubuntu 修改 ulimit‑n(nofile,最大打开文件数) 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 博文阅读密码验证 - 博客园 Word里打出“方框中间带勾”的符号 Windows 10/11 安装 MySQL 5.7 步骤(内部使用) Python编程语言的运行速度(CPU时间),与C语言对比 设置MySQL随操作系统Ubuntu启动 2026年秋季,2027年春季,西安理工大学 校历 博文阅读密码验证 - 博客园 Windows 11,用任务栏的搜索框搜索到一个软件,点击无法打开, 是bug 拆分视频的软件工具,Avidemux 开源免费 无法在此设备上加载驱动程序,可行可用 ubuntu 设置北京日期时间 mysql 在新电脑上导入,出现错误:ERROR at line 4019: Unknown command '\''. - emanlee 安装 yarn npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。 - emanlee VS code, 最近打开过哪些项目或文件夹,把这些备份下来,到另外一台电脑上恢复 傲梅分区助手 【好用】 ubuntu 可以使用Windows远程桌面连接吗?【可以】 把xshell的全部连接和密码,从一台Windows 10电脑,迁移到Windows11电脑。 Windows 远程桌面(mstsc)完整迁移方案(含历史连接记录、RDP 配置、保存的账号密码)【可行】 Endnote,如何能完整迁移库和模版
Python函数内部的局部变量和全局变量
emanlee · 2026-03-27 · via 博客园 - emanlee

解释:

number = 10             # 定义全局变量
def test_one():
    print(number)       # 在函数内部访问全局变量
    number=number+1     # 在函数内部直接修改全局变量【加上这句会报错】
test_one()
print(number)           # 在函数外部访问全局变量

这是 Python 中全局变量与局部变量作用域的知识点。

1. 代码为什么会报错?

先看你的代码: 

number = 10            # 全局变量

def test_one():
    print(number)      # 访问全局变量 ✅ 没问题
    number += 1        # 修改全局变量 ❌ 报错!

test_one()
print(number) 

运行后会报错:  

UnboundLocalError: local variable 'number' referenced before assignment

2. 核心原理 

Python 有一条铁律: 

在函数内部,只要对变量进行赋值操作,Python 就会把这个变量当作局部变量,而不是全局变量。

过程是这样的: 

  1. 你写了 number += 1
  2. Python 扫描函数体,发现有赋值,就判定:
    • number局部变量
  3. 然后执行 print(number)
    • 但此时局部变量 number 还没被创建
    • 所以报:局部变量在赋值前被引用

3. 为什么只 print 不报错,一加赋值就报错?

  • print(number):Python 找不到局部变量,会向上找全局变量,正常运行。
  • 一旦出现 number = ...number += ...
  •  Python 就认定它是局部变量,整个函数内都按局部变量处理。

4. 正确写法:使用 global 声明

如果你想在函数内部修改全局变量,必须加 global

number = 10

def test_one():
    global number       # 声明:我要用全局变量 number
    print(number)
    number += 1         # 现在可以修改了 ✅

test_one()
print(number)  # 11

5. 一句话总结

  • 只访问全局变量:不用 global
  • 要修改全局变量:必须加 global 声明
  • 否则 Python 会把它当成局部变量,导致报错