函数(4)

函数对象:

1、可以赋值

f=func

print(f,func)

f()

2、可以当做函数当做参数传给另外一个函数

def foo(x):

    # print(x)

    x()

3、可以当做函数当做另外一个函数的返回值

def foo(x):

    return x

res=foo(func)

print(res)

res()

4、可以当做容器类型的一个元素

l=[func,]

# print(l)

l[0]()

 
dic={'k1':func}

print(dic)

dic['k1']()

函数嵌套:

1、函数的嵌套调用:在调用一个函数的过程中又调用其他函数

def max2(x,y):

    if x > y:

        return x

    else:

        return y

def max4(a,b,c,d):

    res1=max2(a,b)

    res2=max2(res1,c)

    res3=max2(res2,d)

    return res3


res=max4(1,2,3,4)

print(res)

 

2、函数的嵌套定义:在函数内定义其他函数

def f1():

    def f2():

        pass

闭包函数:

闭包函数=名称空间与作用域+函数嵌套+函数对象

       核心点:名字的查找关系是以函数定义阶段为准

""函数指的该函数是内嵌函数

""函数指的该函数包含对外层函数作用域名字的引用

闭包函数:名称空间与作用域的应用+函数嵌套

def f1():
    x = 333
    def f2():
        print(x)
    f2()
x=11111
def bar():
    x=44
    f1()
def foo():
    x=2222
    bar()
foo()

闭包函数:函数对象

def f1():
    x = 333
    def f2():
        print(x)
    return f2
f=f1()
def foo():
    x=5555
    f()
foo()

两种为函数体传参的方式

方式一:直接把函数体需要的参数定义成形参

def f2(x):
    print(x)
f2(1)
f2(2)
f2(3)

方式二:嵌套调用

def f1(x):
    x=3
    def f2():
        print(x)
    return f2
x=f1(3)
print(x)

x()

猜你喜欢

转载自www.cnblogs.com/zhenghuiwen/p/12534752.html
今日推荐