zoukankan      html  css  js  c++  java
  • python's eleventh day for me

     python2 中没有nonlocal。

    函数名是什么?

        函数名就是函数的名字, 本质:变量,特殊的变量。

    1.单独打印函数名:

    def func():
        print(666)
    print(func)     # <function func at 0x0000020C8C7C8F28>   函数的存储位置。

    2.函数名的赋值:

    def func():
        print(666)
    f = func
    print(f)      #<function func at 0x0000015710A08F28>

    3.函数名可以作为参数:

    a = 1
    def f(x):
        print(x)
    f(a)     #  1

    4.函数名可以作为容器类数据的元素。

    def func1():
        print(1111)
    def func2():
        print(2222)
    def func3():
        print(3333)
    # func1()
    # func2()
    # func3()
    l = [func1,func2,func3]
    for i in l:
        i()
        # 1111
        # 2222
        # 3333
    
    
    def func1():
        print(1111)
    def func2():
        print(2222)
    def func3():
        print(3333)
    l = []
    for i in range(1,4):
        l.append('func'+str(i))
    for i in l:
        eval(i)()     #  i 里面是什么类型  eval(i)  就可以直接把i提出来。

    5.函数名可以作为函数的返回值。

    def func(x):
        return x
    ret = func(5)
    print(ret)    # 5

    闭包:就是内层函数对外层函数(非全局)变量的引用。

    def wraaper():
        def inner():
            print(666)
        return inner
    ret = wraaper()       # inner
    ret()        # inner()

    如何判断是否为闭包:内层函数名.__closure__    如果有cell 就是闭包。

    def wrapper():
        name = '老男孩'
        def inner():
            print(name)
        inner()
        print(inner.__closure__)
    wrapper()
    
    # 老男孩
    # (<cell at 0x000001473F9A0B58: str object at 0x000001474033A5D0>,)

        如果不是闭包就打印None.

    name = '顾清秋'
    def wraaper():
        def inner():
            print(name)
        inner()
        print(inner.__closure__)
    wraaper()
    
    # 顾清秋
    # None

    面试题:‘闭包’

    闭包:当函数开始执行时,如果遇到了闭包,他有一个机制,他会永远开辟一个内存空间,将闭包中的变量等值放入其中,不会随着函数的执行完毕而消失。

    name = '老男孩'
    def wraaper(n):
        # 相当于  n = '老男孩'
        def inner():
            print(n)    # 老男孩
        inner()
        print(inner.__closure__)    # (<cell at 0x0000017B8CCD0B58: str object at 0x0000017B8D63A5D0>,)
    wraaper(name)

    第一类对象(first - class object)指

    1. 可在运行期创建。

    2. 可用作函数参数或返回值。

    3. 可存入变量的实体。

    闭包:

      闭包函数:

            内部函数包含对外部作用域而非全局作用域变量的的引用,该内部函数成为闭包函数。

            ##  函数内部定义的函数被称为内部函数。

    闭包函数获取网络应用:

    from urllib.request import urlopen
    def index():
        url = "http://www.xiaohua100.cn/index.html"
        def get():
            return urlopen(url).read().decode('utf-8')
        return get
    xiaohua = index()
    content = xiaohua()
    print(content)

       

    什么是装饰器?

      装饰器本质上就是一个python函数,它可以让其他函数在不需要做任何代码变动的前提下,增加额外的功能,装饰器的返回值也是一个函数对象。

      装饰器的应用场景:比如插入日志,性能测试,事务处理,缓存等等场景。

    装饰器的形成过程:

      装饰器---简单版

    import time
    def func1():
        print('in func1')
    def timer(func):    #  func = func1
        def inner():
            start = time.time()
            func()
            time.sleep(0.3)
            print(time.time()-start)
        return inner
    func1 = timer(func1)   #inner
    func1()     # inner()

      装饰器---语法糖

    import time
    def timer(func):
        def inner():
            start_time = time.time()
            func()
            time.sleep(0.3)
            end_time = time.time()
            print(end_time-start_time)
        return inner
    @timer  #语法糖      #  func1 = timer(func1)
    def func1():
        print("in func1")
    func1()

      带参数的装饰器:

    import time
    def timer(func):
        def inner(a):
            start_time = time.time()
            func(a)
            time.sleep(0.3)
            end_time = time.time()
        return inner
    @timer
    def func1(a):
        print(a)       #  1
    func1(1)

    hold 住所有参数的装饰器

    import time
    def timer(func):
        def inner(*args,**kwargs):
            start_time = time.time()
            ret = func(*args,**kwargs)
            time.sleep(0.3)
            end_time = time.time()
            print(end_time-start_time)
            return ret
        return inner
    @timer
    def func1(a,b):
        print(a,b)
    @timer
    def func2(a,b,c):
        print(a,b,c)
        return True
    func1('aaa','bbb')
    print(func2('aaa','bbb','ccc'))
  • 相关阅读:
    EF-一对一关系
    EF-生成迁移版本
    打包、压缩指令
    gut pull 拉取出错
    nohup的使用方法
    fopen打开文件出错
    实现多线程下载图片到本地③
    实现单线程下载图片到本地②
    服务器重装系统后终端登录不上去
    简单实现图片抓取下载到本地①
  • 原文地址:https://www.cnblogs.com/stfei/p/8674491.html
Copyright © 2011-2022 走看看