zoukankan      html  css  js  c++  java
  • 函数名,闭包,装饰器

    中心主题
    函数名      学名:第一对象
    def func():
    pass
    print(func) 查看函数名的内存地址
    函数名可赋值给其他变量 f = func
    函数名可以作为容器类变量的元素 [func,]等
    函数名可以作为函数的参数
    def func1(f):
    f()
    函数名可以作为函数的返回值
    def f():
    return func
    闭包
    内层函数,对外层函数(非全局)的变量的引用,叫做闭包
    def wrapper():
    name = 'alex'
    def inner():
    print(name)
    inner()
    判断方法
    在函数内使用print(inner.__closure__),cell--是闭包,None--不是
    闭包作用:python内部有一个机制,遇到闭包,
    他会在内存中开启一个内存空间,不会随着函数的结束而关闭
    避免内存空间的频繁开关,保护内存
    装饰器
    作用:在不修改代码的前提下增加函数功能
    简单的装饰器
    def timmer(f):
    def inner():
    start_time = time.time()
    time.sleep(0.1)
    f()
    end_time = time.time()
    print('----> 执行效率%s' % (end_time - start_time))
    return inner
    @timmer # func = timmer(func)
    def func():
    print('嘻嘻更健康')
    func() # inner()
    @ 语法糖
    @ 与被装饰函数紧密相连,中间不得有空行
    带有参数的装饰器
    def timmer(f):
    def inner(*args,**kwargs):
    start_time = time.time()
    time.sleep(0.1)
    f(*args,**kwargs)
    end_time = time.time()
    print('----> 执行效率%s' % (end_time - start_time))
    return inner

    @timmer # func = timmer(func)
    def func(a):
    print('%s嘻嘻更健康'%a)
    被装饰函数参数个数不等,因此内层函数使用不定长参数
    带有返回值的装饰器
    def timmer(f):
    def inner(*args,**kwargs):
    start_time = time.time()
    time.sleep(0.1)
    ret = f(*args,**kwargs) # 222
    end_time = time.time()
    print('----> 执行效率%s' % (end_time - start_time))
    return ret
    return inner

    @timmer # func = timmer(func)
    def func(a):
    return 222
    print(func('萌哥'))
    内层函数将被装饰的函数运行结果返回,外层函数将内层函数函数名返回
    通用装饰器
    def wrapper(func):
    def inner(*args,**kwargs):
    ret = func(*args,**kwargs)
    return ret
    return inner

    @wrapper
    def func():
    print(66)
    func()

  • 相关阅读:
    Ubuntu(Linux) + mono + jexus +asp.net MVC3 部署
    爬虫代理
    爬取文件时,对已经操作过的URL进行过滤
    Scrapy项目创建以及目录详情
    Scrapy 框架 安装
    爬虫案例
    爬虫基础以及 re,BeatifulSoup,requests模块使用
    Django_Admin操作
    django 权限管理permission
    Node--01
  • 原文地址:https://www.cnblogs.com/2018-01-30/p/8405683.html
Copyright © 2011-2022 走看看