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

    一:函数名

    1, 函数名的内存地址,print(func)
    2, 函数名可以赋值给其他变量
    3, 函数名可以当做容器类的元素

    def f1():
         print('f1')
    def f2():
         print('f2')
     def f3():
         print('f3')
     l = [f1,f2,f3]
     d = {'f1':f1,'f2':f2,'f3':f3}
    # #调用
    l[0]()
    d['f2']()
    View Code

    4, 函数名可以当做函数的参数.
    5, 函数名可以当做函数的返回值.

    def func2():
        print(222)
    def func3(x):
        # print(x)  # x=func2()
        return x
    f = func2
    f()        #func2()
    ret = func3(func2)  # ret=func2
    ret()              #func2()
    func3(func2)()
    
    def f1():
        print('f1')
    def func1(argv):
        argv()       #f1()
        return argv
    f = func1(f1)
    f()
    View Code

    二:闭包

    1, 内层函数,对外层函数(非全局)的变量的引用,叫做闭包。

    def func():
        name = 'eva'
        def inner():
            print(name)  #此处打印的name是对上一层函数(外部作用域非全局作用域)变量的引用。
        return inner
    f = func()
    f()
    View Code

    2, 闭包函数的检测:方法__closure__

    def func():
        name = 'eva'
        def inner():
            print(name)
        print(inner.__closure__) #此处打印的有cell元素,故inner是闭包函数。
        return inner
    f = func()
    f()
    
    
    name = 'egon'
    def func2():
        def inner():
            print(name)
        print(inner.__closure__) #此处打印的是None,说明此内部函数inner不是闭包函数。
        return inner
    f2 = func2()
    f2()
    View Code

    3,闭包的用处:如果说你内存函数是个闭包,python内部有一个机制,遇到闭包, 他会在内存中开启一个内存空间,不会随着函数的结束而关闭。

    from urllib.request import urlopen
    print(urlopen('http://www.cnblogs.com/jin-xin/articles/8259929.html').read())
    def index(url):
        content = urlopen(url).read()
        def get():
            with open('爬虫','a') as f1:
                f1.write(content.decode('utf-8'))
        return get
    index('http://www.cnblogs.com/jin-xin/articles/8259929.html')()
    View Code

    三:装饰器
    1,什么是装饰器?

    装饰器实际上是一个python函数,它可以让其它函数在不需要任何代码变动的前提下增加额外功能。装饰器的返回值也是一个函数对象,它经常用于切面需求的场景,比如:性能检测,缓存等。

    2,简单的装饰器

    比如给函数加一个性能检测的装饰器,程序如下:

    import time
    def timmer(f):   #f=func
        def inner():
            start_time = time.time()
            time.sleep(0.1)
            f()       #func()
            end_time = time.time()
            print('----> 执行效率%s' % (end_time - start_time))
        return inner
    @timmer  # func = timmer(func)
    def func():
        print('书法大赛')
    func() # inner()
    View Code

    3,带参数的装饰器,程序如下:

    import time
    def timmer(f):  #f=func
        def inner(*args,**kwargs):
            print(*args,**kwargs)
            start_time = time.time()
            time.sleep(0.1)
            f("张三")   #func("张三")
            end_time = time.time()
            print('----> 执行效率%s' % (end_time - start_time))
        return inner
    @timmer# func = timmer(func)       func=inner
    def func(a):
        print('%s书法大赛'%a)
    func("aaa")       #inner("aaa")
    View Code

    4,带返回值的装饰器,程序如下:

    import time
    def timmer(f):  #f=func
        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('萌哥'))     #inner("萌哥')
    View Code

    5,通用装饰器,程序如下:

    def wrapper(func):
        def inner(*args,**kwargs):
            '''执行函数前操作'''
            ret = func(*args,**kwargs)
            '''执行函数后的操作'''
            return ret
        return inner
    @wrapper        #func=wrapper(func)
    def func():
        print(66)
    func()
    View Code

        

     

     
  • 相关阅读:
    selenium 常见操作,使用 select 类来处理 下拉列表操作
    selenium 常见操作,使用 ActionChains 类来进行鼠标操作
    selenium 常见元素操作:三大切换--浏览器窗口切换、iframe 窗口切换、alert弹窗切换
    Python selenium 启动浏览器有无界面执行
    selenium 常见元素操作:三大等待---强制等待、隐性等待、显性等待
    web自动化测试中的八大定位方法,推荐使用xpath
    Python 中 WebElement 类中的部分操作
    selenium 启动浏览器后基本操作:后退、前进、刷新、关闭窗口、关闭会话
    selenium webdriver 启动火狐、谷歌、IE浏览器及插件下载地址
    web 页面组成之 HTML页面的 标签类型 及 input 控件
  • 原文地址:https://www.cnblogs.com/leiwei123/p/8413105.html
Copyright © 2011-2022 走看看