75、函数也是对象,内存底层分析
Python中,“一切都是对象”。实际上,执行def定义函数后,系统就创建了相应的函数对象。我,执行如下程序,然后进行解释:
def print_star(n):
print('*'*n)
print(print_star)
print((id(print_star)))
c=print_star
c(3)
执行结果:
<function print_star at 0x0000000001CE2EA0>
30289568
***
上面代码执行de时,系统中会创建函数对象,并通过 print star这个变量进行引用
76、变量的作用域(全局变量和局部变量)
变量起作用的范围称为变量的怍用域,不同作用城内同名变量之间互不影晌,变量分为:全局变量、局部变量。
全局变量:
1.在的数和定义之外声明的变量。作用域为定义的模块,从定义位置开始直到横块
2.全局变量降低了函数的通用性和可读性。尽量免全局变量的使用
3.全局量一般做常量使用。
4.函数内要改变全局变量的值,使global声明一下
局部变量:
1.在函数体中(包含形式数参数)声明的量
2.局部变量的引用比全局变量快,优先考虑使用
3.如果局变量和全局变量同名,则在函数内隐藏全局变量,只使用同可名的局部变量
a = 3 # 全局变量
def test01():
b = 4 # 局部变量
print(b * 10)
global a #如果要在函数内改变全局变量的值,需要增加global关键字声明
a=300 #局部变量的a
print(a)
test01()
test01()
# print(b)会报错,因为b是局部变量
print(a)
输出局部变量和全局变量
a = 3 # 全局变量
def test01():
b = 4 # 局部变量
print(b * 10)
global a #如果要在函数内改变全局变量的值,需要增加global关键字声明
a=300 #局部变量的a
print(locals()) #打印输出局部变量
print(globals()) #打印输出全局变量
test01()
test01()
# print(b)会报错,因为b是局部变量
print(a)
77、局部变量和全局变量效率测试
局部变量的查询和访问速度比全局变量快,优先考虑使用,尤其是在循环的时候。
在特别强调效率的地方或者循环次欠数较多的地方冋以甬过将全局变量转为局部变量提高运行速度
#测试局部变量,全局变量的效率
import math
import time
def test01():