函数 二

一、函数的对象

1:可以被引用

def bar():
    print('from bar')
f=bar
f()  #打印结果  from bar       bar()  被f引用

2、可以当做参数传入

x=1
def func(a):
    print(a)
func(x)#打印结果为1  func(1)即为func(a)调用即为 print(1

def bar(): 第4步
print('from bar') 第5步

def wrapper(func): #func=bar 第2步
func() #bar() 第3步

wrapper(bar) 第一步 #打印结果为from bar

3、可以当做函数的返回值

x=1
def foo():
    return #即return x 的值,即1

res=foo()   第2步 就是res的值就是调用foo()
print(res) # 第一步就 是打印res 的值
def bar():
    print('from bar')

def foo(func): #func=<function bar at 0x00000225AF631E18>
    return func #return <function bar at 0x00000225AF631E18>


foo(bar) #f=<function bar at 0x00000225AF631E18>
#  foo(bar)  就是把bar 赋值给func, 所以foo(func)就是foo(bar).即return (func)为
return  bar 的值,  而bar的值 即为from bar.

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

def get():
    print('from get')

def put():
    print('from put')

l=[get,put]

# print(l)
l[0]()  #打印结果 为  l[0]为l列表中的第一个元素get,所以l[0]()为get()
即结果为 from get.
   其中get() 这个元素为l列表里的元素

二、闭包函数  

定义在函数内部的函数, 并且该函数包含对外部函数作用域中名字的引用,该函数就称为闭包函数

def outter():
    name='egon'
    def inner():
        print('my name is %s' %name)

    return inner


f=outter()


#outter()调用 要用到inner()函数, inner函数在outter()函数的里面, 且影响到外部函数的引用 ,所以  inner()函数即为闭包函数
原文地址:https://www.cnblogs.com/lx3822/p/8665776.html