函数

一:函数名的作用(函数名的命名规则跟变量一样)

1,作为函数的地址

def func():
    pass
print(func)
View Code

2,作为变量

def func():
    print(123)
f=func
f1=f
f2=f1
f2()
View Code

3,作为函数的参数

def func():
    print(23)
def func1(f):
    f()
func1(func)
View Code

4,作为函数的返回值

def func():
    def inner():
        print(123)
    return inner
View Code

5,作为容器的元素

def func1():
    pass
def func2():    
    pass
def func3():
    pass
a=[func1,func2,func3]
View Code

函数名是第一类对象。

二,闭包函数

内部函数对外部函数的的变量(非全局变量)的引用,并返回,就会形成递归。一般函数会在调用的时候在内存中产生一个空间,该空间会随函数的结束而消失;在递归函数中,该空间不会随函数的结束而消失。能够节省空间。

def func(a):
    def inner():
        print(a)
    return inner
a=3
f=func(a)
f()
View Code

globals()  返回全局变量的字典

locals()返回当前位置 局部变量的字典

def func():
    def  inner():
        a=3
        print(globals())
        print(locals())
    inner()
    return inner
print(globals())
print(locals())
func()
View Code

在全局空间,字典内容相同,在局部空间,字典内容不同。
如何判断闭包函数     f.__closure__

def func(a):
    def inner():
        print(inner.__closure__)
        return a
    return inner
View Code

闭包的应用
装饰器,爬虫

import requests
def func(url):
    def inner():
        ret=requests.get(url)
        return ret.text
    return inner
url="http://www.baidu.com"
f=func(url)
f1=f()
print(f1)
View Code
原文地址:https://www.cnblogs.com/ruoxiruoxi/p/9502211.html