闭包函数

时间:2019-11-19
本文章向大家介绍闭包函数,主要包括闭包函数使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一、什么是闭包函数

闭:封闭

包:包裹

内层函数被外层函数包裹起来,内层函数可以引用外层函数的名字

闭包函数:

  • 闭包函数必须在函数内部定义
  • 闭包函数可以引用外层函数的名字

闭包函数的定义

闭包函数是 函数嵌套,函数对象,名称空间与作用域 结合体

def func(x):
    x = 100
    # inner是闭包函数
    def inner():
        print(x)
    print(inner, 11)
    return inner
func(1)
# res = func(1)
# print(res)
# print(func(1))
 
inner = func(1)
#inner()
 
 
<function func.<locals>.inner at 0x000001B67E1C2F78> 11
<function func.<locals>.inner at 0x000001B67E1C2F78> 11
 
Process finished with exit code 0

直接传参:

def func(x):
    return x
 
 
func(1000)

通过闭包函数传参

def outer(number):
    def inner():
        print(number)
    return inner
 
 
func = outer(1000)
func()

二、闭包函数的应用

闭包函数的应用是为了装饰器作准备

需求:爬取某个网站,打印获取数据的长度

方式一:直接传参

import requests
# 方式一:直接传参
def spider_func(url):
    # 往url地址发送请求,获取响应数据
    response = requests.get(url)  # 必须接受url
    # 状态码: 200
    if response.status_code == 200:
        # 获取当前url地址中所有的文本
        print(len(response.text))
        print(response.text)
 
url = 'https://www.cnblogs.com/xiaoyuanqujing/'
spider_func(url)

方式二: 通过闭包函数接受url地址,执行爬取函数

def spider_outer(url):
    def spider_inner():
        response = requests.get(url)
        if response.status_code == 200:
            print(len(response.text))
    return spider_inner
 
spider_blog = spider_outer('https://www.cnblogs.com/xiaoyuanqujing/')
spider_blog()
 

原文地址:https://www.cnblogs.com/cnhyk/p/11890751.html