栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python闭包和装饰器

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python闭包和装饰器

目录

一.摘要

二.闭包

1.在全局调用函数

2.在局部调用函数

3.传参

三.装饰器

1.不传参

2.传参

3.返回值


一.摘要

闭包:在一个内部函数中,对外部作用域的变量进行引用,(并且一般外部函数的返回值为内部函数),那么内部函数就被认为是闭包。

装饰器:给原有的功能(函数)添加一个新函数。

二.闭包

1.在全局调用函数

代码如下:

def func1():
    def func2():
        return "func2"
    #函数名没有加括号的时候不算调用,只是个地址
    print("函数内部",id(func2),func2)
    return func2   #通过return将内部的函数地址返回
f2=func1()     #执行函数需要加括号
a=f2()   #执行func1函数内部的func2函数
print("打印func1内部的func2函数的返回值:",a)

运行结果:

2.在局部调用函数

方法一:

代码如下:

def func1():
    def func2():
        return "func2"
    f2=func2()  #属于在局部调用函数
    print(f2)
func1()

运行结果:

方法二:

代码如下:

def func1():
    def func2():
        return "func2"
    print("func2:",func2)#一个地址,没有调用函数
    f2=func2 #函数地址赋值操作
    print("f2:",f2)
    #执行函数操作
    print(func2(),"n",f2()) #局部
    return func2
func1()

运行结果:

3.传参

①

代码如下:

def func1(name):
    def func2():
        return "This is "+name
    return func2
f2=func1("hello")
print(f2())

运行结果:

 ②

代码如下:

def s1(z):
    def s2(x,y):
        return x*y*z
    return s2
s2=s1(4)
sss=s2(2,3)
print(sss)

运行结果:

三.装饰器

1.不传参

1.执行原理

代码如下:

#添加的功能
def func1(host):
    def func2():
        print("你好英文:")
        host()  #主函数运行的位置
    return func2
#主函数
def host():
    print("hello")
func2=func1(host)
func2()

运行结果:

2.基本使用

代码如下:

#添加的功能
def func1(host):
    def func2():
        print("你好英文:")
        host()  #主函数运行的位置
    return func2
#主函数
@func1
def host():
    print("hello")
host()

运行结果:

2.传参

1.运行原理

代码如下:

def func1(host):
    def func2(name):
        print(name,"什么好吃")
        host(name)  #主函数运行的位置
        print(name,"10元")
    return func2
#主程序
def host(name):
    print(name,"好吃的零食")
func2=func1(host)
func2("冰淇淋")

运行结果:

2.基本使用

代码如下:

def func1(host):
    def func2(name):
        print(name,"什么好吃")
        host(name)  #主函数运行的位置
        print(name,"10元")
    return func2
#主程序
@func1
def host(name):
    print(name,"好吃的零食")
host("冰淇淋")

运行结果:

3.返回值

代码如下:

def func1(host):
    def func2(name):
        print(name,"什么好吃")
        host(name)  #主函数运行的位置
        result=host(name)
        print(name,"10元")
        return result  #装饰器的返回值在闭包内部返回的
    return func2
#主程序
@func1
def host(name):
    return name+"好吃的零食"
result=host("冰淇淋")
print(result)

运行结果:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1018948.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号