python基础梳理(十一)函数function②函数变量\函数名做实参\函数做返回值\函数嵌套\作用域\globals和locals

一、函数变量
函数名是变量,它在创建的时候绑定一个函数,绑定在后面的代码块
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被
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值