a=3deftest01():global a # 如果要在函数内改变全局变量的值,增加 global 关键字声明print(a)#打印全局变量 a 的值
a=300
test01()print(a)
执行结果:
3300
2. 全局变量、局部变量同名测试
a=100deff1():
a =3#同名的局部变量 print(a)
f1()print(a)#a 仍然是 100,没有变化
执行结果:
3100
print(locals()) #打印输出的局部变量
print(globals())#打印输出的全局变量
3. 局部变量和全局变量的效率测试
import math
import time
deftest01():
start=time.time()for x inrange(10000000):
math.sqrt(30)pass
end=time.time()print('所用时间为{0}'.format(end-start))
test01()deftest02():
start=time.time()
a=math.sqrt
for x inrange(10000000):
a(30)pass
end=time.time()print('所用时间为{0}'.format(end-start))
test02()
运行结果:
所用时间为0.020941734313964844
所用时间为0.013962745666503906
三、传递对象
1. 传递可变对象
b =[10,20]print(id(b))deff2(m):print("m:",id(m))#b 和 m 是同一个对象
m.append(30)#由于 m 是可变对象,不创建对象拷贝,直接修改这个对象
f2(b)print("b:",id(b))print(b)
运行结果:2644773456256
m:2644773456256
b:2644773456256[10,20,30]
a =100deff1(n):print("n:",id(n))#传递进来的是 a 对象的地址
n = n+200#由于 a 是不可变对象,因此创建新的对象 n print("n:",id(n))#n 已经变成了新的对象 print(n)
f1(a)print(a).#a还是100print("a:",id(a))
执行结果:
n:1663816464
n:46608592300100
a:1663816464