一、函数变量
函数名是变量,它在创建的时候绑定一个函数,绑定在后面的代码块
python中的变量不分类型,每个变量记录对象的内存地址或id
xxxx():函数调用
xxxx :函数变量,绑定在函数对象,保存函数的入口地址
示例一:
def fun(L = []):
print("函数fun被调用")
print(fun)
fun([1,2,3])
fun = None
执行结果:
<function fun at 0x000001A1DBA94730>
函数fun被调用
#从上述的执行结果可以看出,fun是个函数变量,存储着这个函数的地址0x000001A1DBA94730
#从上面的基础上继续执行下面语句:
fun()
执行结果:
fun()
TypeError: 'NoneType' object is not callable
示例二:
def fun1(L = []):
print("函数fun1被调用")
print(fun1)
def fun2(L = []):
print("函数fun2被调用")
print(fun2)
fun2 = fun1 #其实就是将fun1变量绑定的fun1函数的入口地址给了fun2
fun2()
fun1()
执行结果:
<function fun1 at 0x000001EDD0AD4730>
<function fun2 at 0x000001EDD0AD49D8>
函数fun1被调用
函数fun1被调用
示例三:
def fun(L = []):
print("函数fun被调用")
print(fun)
del fun #删除函数变量,这个函数的引用计数-1,所以这个函数的内存可能会马上被回收
fun()
执行结果:
<function fun at 0x0000024C6BAD4730>
File "C:/Users/32191/PycharmProjects/mypythonpro2/function2.py", line 9, in <module>
fun()
NameError: name 'fun' is not defined
def fun(L = []):
print("函数fun被调用")
print(fun)
f = fun #f去绑定记录这个函数的地址
del fun #删除fun变量
f() #可以调用
fun() #此时fun为无效的
执行结果:
<function fun at 0x00000250C4D24730>
函数fun被调用
File "C:/Users/32191/PycharmProjects/mypythonpro2/function2.py", line 10, in <module>
fun()
NameError: name 'fun' is not defined
实际上一个函数可以上面红色、绿色和缺省部分:
1.红色部分:函数名fun = 函数对象,函数名就是个变量,用这个变量和函数对象捆绑在一起
2.绿色部分:这个是函数对象的实体部分。函数变量就是绑定的这个参数。
3.缺省参数部分:在我们def这个函数的时候,列表的内存就存在了。而不是运行时才给的
示例四:
def f1():
print("f1被调用了")
def f2():
print("f2被调用了")
f1,f2 = f2,f1 #交换了俩个变量绑定着的函数的入口地址
f1()
f2()
执行结果:
f2被