一、变量作用域(Scope)
变量的有效使用范围,在哪里能访问、在哪里不能访问,就是作用域。
Python 主要分两种:
二、局部变量
1. 定义
在函数内部定义的变量,叫局部变量。
2. 特点
3. 示例
deffunc():
x = 10# 局部变量
print(x) # 内部可以访问
func() # 输出 10
print(x) # 报错!外部不能访问
4. 不同函数同名局部变量互不影响
deff1():
a = 100
print(a)
deff2():
a = 200
print(a)
f1() # 100
f2() # 200
三、全局变量
1. 定义
在函数外部、整个文件顶层定义的变量,叫全局变量。
2. 特点
- • 函数内部不能直接修改全局变量(需要 global)
3. 示例:函数内读取全局变量
name = "小明"# 全局变量
deffunc():
print(name) # 可以读
func() # 小明
四、global 关键字(关键难点)
1. 作用
在函数内部声明要使用全局变量,这样就可以修改全局变量。
2. 语法
deffunc():
global 变量名
变量名 = 新值
3. 示例:修改全局变量
count = 0
defadd():
global count # 声明使用全局 count
count += 1
add()
print(count) # 1
4. 易错点:不写 global 会怎样?
会创建新的局部变量,而不是修改全局变量。
x = 100
deffunc():
x = 200# 这是新的局部变量,和全局x无关
print(x)
func() # 200
print(x) # 100(全局没变)
5. 先 global 再使用
不能先赋值再 global,会报错。
deffunc():
x = 10
global x # 报错
五、全局 vs 局部 总结表
六、LEGB 规则(进阶,理解即可)
Python 查找变量的顺序:
- 4. Built-in 内置(如 print、sum)
找不到就报错:NameError
七、匿名函数 lambda
1. 什么是匿名函数?
2. 语法
lambda 参数1, 参数2, ...: 表达式
特点:
3. 最简单 lambda
f = lambda x: x + 1
print(f(5)) # 6
等价于:
deff(x):
return x + 1
4. 多个参数
add = lambda a, b: a + b
print(add(3, 4)) # 7
5. 带条件表达式(三元运算)
max_num = lambda a, b: a if a > b else b
print(max_num(10, 20)) # 20
6. 常用场景:配合高阶函数
lambda 最适合用在 sorted、map、filter 里。
示例1:列表按自定义规则排序
lst = [("apple", 5), ("banana", 2), ("orange", 3)]
lst.sort(key=lambda x: x[1]) # 按数字排序
print(lst)
示例2:map 映射
nums = [1,2,3]
res = list(map(lambda x: x*2, nums))
print(res) # [2,4,6]
示例3:filter 过滤
nums = [1,2,3,4,5]
res = list(filter(lambda x: x%2==0, nums))
print(res) # [2,4]
7. lambda 不能做什么
八、经典易错点合集(新手必看)
易错1:函数内直接改全局变量报错
x = 10
deffunc():
x += 1# 报错!不能直接修改
func()
解决:加 global x
易错2:局部变量和全局变量同名,容易混乱
x = 100
deffunc():
x = 200
print(x)
func() # 200(局部)
print(x) # 100(全局)
易错3:lambda 不能多行,不要强行写复杂逻辑
易错4:循环中使用 lambda 容易踩坑(延迟绑定)
了解即可,新手暂时不用深究。
📚 练习题(带答案讲解)
练习1
写出运行结果:
deff():
a = 10
f()
print(a)
答案:报错 NameError
讲解:a 是局部变量,外部不能访问。
练习2
写出结果:
x = 5
deffunc():
global x
x = 10
func()
print(x)
答案:10
讲解:global 声明后,修改的是全局变量。
练习3
用 lambda 写函数,返回两个数的乘积。
mul = lambda a,b: a*b
print(mul(3,4)) # 12
练习4
用 lambda 实现:传入一个数字,判断是否大于 10,返回 True/False。
is_big = lambda x: x > 10
print(is_big(15)) # True
📝 本章超级总结
变量作用域
- 1. 局部变量:函数内定义,只能内部用,函数结束销毁
- 3. 函数内只能读全局,要修改必须加 global
匿名函数 lambda
- 4. 常用于
sorted / map / filter