变量作用域
- 变量由作用范围限制
- 分类:按照作用域分类:
- 全局(global):在函数外部定义
- 局部(local):在函数内部定义
- 变量的作用范围:
- 全局变量:在整个全局范围都有效
- 全局变量在局部可以使用
- 局部变量在局部范围可以使用,局部变量在全局范围内无法使用
a1 = 100 #a1是全局变量 def fun(): print(a1) print("I am in fun") a2 = 99 #a2 是局部变量,作用范围为fun print(a2) print(a1) fun() 运行结果: 100 100 I am in fun 99 如果此时在调用a2 a1 = 100 #a1是全局变量 def fun(): print(a1) print("I am in fun") a2 = 99 #a2 是局部变量,作用范围为fun print(a2) print(a1) fun() print(a2) 运行结果: 100 Traceback (most recent call last): File "C:/Users/adad/PycharmProjects/untitled2/1/1.py", line 141, in <module> print(a2) NameError: name 'a2' is not defined I am in fun 99
提升局部变量为全局变量
- 使用global
def fun():
global b1
b1 = 100
print(b1)
b2 = 99
print(b2)
fun()
print(b1)
globals、locals 函数
- 可以通过globals和locals显示局部变量和全局变量
a = 1 b = 2 def fun(c,d): e = 111 print("Locals={0}".format(locals())) print("Globals={0}".format(globals())) fun(100,200)
eval() 函数
- 把一个字符串当成一个表达式来执行,返回表达式执行后的结果
x = 300 y = 200 z = eval("x+y") print(z)
递归函数
- 函数直接或间接调用自己
- 有点:间接、理解容易
- 缺点:对递归深度有限制,消耗资源大
x = 0 def fun(): global x x +=1 print(x) fun() fun()